JS服务端技术—Node.js知识点锦集

【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
https://blog.csdn.net/m0_69908381/article/details/134544523

出自【进步*于辰的博客
接触Node.js挺长时间了,工作也经常使用,只是接口开发更倾向于业务的梳理,对基础要求反而不高。就是,参考前辈的代码写路由,工作重心在接口代码。

基础不牢固,不仅影响工作效率,而且不利于个人发展,所以近期开始恶补JS服务端技术的基础,就从Node.js开始。

文章目录

  • [1、关于 Buffer](#1、关于 Buffer)
  • 留言

1、关于 Buffer

详述可查阅博文【02-Node.js---Buffer(缓冲器)】(转发)。

参考笔记三,P49.1。

Buffer是一种类似数组的对象,用于表示固定长度的字节序列,其本质是一段内存空间,且空间由 c + + \color{green}{c++} c++申请,每个元素占一个字节。

创建: \color{brown}{创建:} 创建:

  1. Buffer.alloc(size):创建长度为 size 的字节序列;
  2. buffer.allocUnsafe(size):同上,区别是在分配内存时不会清除旧数据(指曾使用过仍保留数据、但目前未使用的内存空间);
  3. Buffer.from(xx):xx 可以是数组、字符串或 Buffer。

说明: \color{red}{说明:} 说明:
1 、由于每个元素占一个字节,故alloc(size)allocUnsafe(size)创建的字节序列共包含 size 个字节。

示例:

js 复制代码
var buf = Buffer.alloc(10)
// 打印buf:<Buffer 00 00 00 00 00 00 00 00 00 00>

规定以16进制的格式进行显示,00(16进制)是0000 0000(二进制),共10个元素。

2from(xx)创建的字节序列所占字节数由 xx 决定。

示例1。(xx是数组)

js 复制代码
var arr = [2, 0, 2, 3]
var buf = Buffer.from(arr)
// 打印buf:<Buffer 02 00 02 03>

数字占一个字节,故长度为4
2(数字,十进制)是02(16进制)。

示例2.。(xx是字符串)

js 复制代码
var buf = Buffer.from('2023')
// 打印buf:<Buffer 32 30 32 33>

为何buf[0]32?因为此时的2不是数字,而是字符。
'2'的 A S C L L 码 \color{blue}{ASCLL码} ASCLL码是50,转换成16进制就是32

示例3。(xx是字符串)

js 复制代码
var buf = Buffer.from('汉字')
// 打印buf:<Buffer e6 b1 89 e5 ad 97>

是不是有点懵?因为Buffer采用utf-8编码,一个汉字占3个字节,故用三个元素表示一个汉字。

再改一下。

js 复制代码
var buf = Buffer.from('汉字')
buf[0] = 97 + 25// 'z'的ASCLL码
buf[1] = 97 + 7
buf[2] = 97 + 8
console.log(buf.toString())// 打印:zhi字

toString()会将每个元素都转换成对应的字符,这样是不是一目了然了。

再补充一点。

js 复制代码
var buf = Buffer.from('汉字')
buf[0] = 97 + 25 + 256// ------------------A
buf[1] = 97 + 7
buf[2] = 97 + 8
console.log(buf.toString())// 打印:zhi字

97 + 25'z'的 A S C L L 码 ASCLL码 ASCLL码,再+ 256已经不是'z',为何最后还是'z'

因为Buffer规定,一个字符占一个字节。换言之,只会用一个字节来表示字符,如果字符对应的 A S C L L 码 ASCLL码 ASCLL码超出一个字节(8位)的表示范围(255),超出的部分会被丢弃。
256对应的二进制是1 00000000,即需要两个字节,则第一个字节舍去,剩下0000 0000,为0(十进制)。

示例4。(xx 是Buffer

js 复制代码
var buf1 = Buffer.from([2, 0, 2, 3])
var buf2 = Buffer.from(buf1)
// 打印buf:<Buffer 02 00 02 03>

与示例1相同。

留言

本人的核心语言是Java,故有时倾向于以Java的思想进行阐述,这可能会给向前端发展的博友们的阅读带来不适。并且,由于本文相当于是我系统学习Node.js的笔记,也基于我的Java功底,所以有些阐述不会那么详细。

不过,Java作为一种强类型的编程语言,我的阐述会很严谨,所以需要大家在阅读时多一点耐心。


本文持续更新中。。。

相关推荐
Adorable老犀牛7 分钟前
npm install 报错
npm·node.js
Vone_669 小时前
node.js 邮箱验证服务器搭建
运维·服务器·node.js
程序员拂雨10 小时前
HTTP和HTTPS模块
http·https·node.js
dgiij15 小时前
excel大表导入数据库
数据库·mysql·node.js·excel
x-cmd16 小时前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
MaisieKim_2 天前
python与nodejs哪个性能高
前端·python·node.js
水煮白菜王2 天前
深入理解 Webpack 核心机制与编译流程
前端·webpack·node.js
程序员拂雨2 天前
Express知识框架
node.js·express
大G哥2 天前
项目中利用webpack的require.context实现批量引入/导入图片
前端·webpack·node.js
七冬与小糖3 天前
【本地搭建npm私服】使用Verdaccio
前端·npm·node.js