【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)
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}{创建:} 创建:
Buffer.alloc(size)
:创建长度为 size 的字节序列;buffer.allocUnsafe(size)
:同上,区别是在分配内存时不会清除旧数据(指曾使用过仍保留数据、但目前未使用的内存空间);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个元素。
2 、from(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作为一种强类型的编程语言,我的阐述会很严谨,所以需要大家在阅读时多一点耐心。
本文持续更新中。。。