2. 认识 Buffer
计算机底层处理的是二进制的数据,网络传输过程中也不例外。
node 提供了 Buffer 类,来处理二进制数据。一个 buffer 对象类似一个数组,其中每一项是一个字节,一般展示为 2 位 16 进制数。下面是一些常用的基础操作:
(本文不考虑字符编码等问题,一切默认为 utf-8)
-
Buffer.from("hello")返回
<Buffer 68 65 6c 6c 6f>,其中每一项是字符的 ASCII 码(utf-8 编码)。 -
Buffer.from([0x00, 0x01, 0x02])返回
<Buffer 01 02 03>,其中每一项是一个字节。 -
buffer.slice()类似数组的 slice 方法,切割出一部分 buffer 并返回 -
buffer.toString()将 buffer 转化成字符串,其中每一个/多个字节代表字符串每一个字符的编码 -
buffer.toJSON()将 buffer 转化为 JSON 对象,其中 data 的每一项为 10 进制 number
let buf = Buffer.from("hello"); // <Buffer 68 65 6c 6c 6f>
console.log(buf.slice(0,3).toString()); // "hel"
console.log(buf.toJSON()); // { type: 'Buffer', data: [ 104, 101, 108, 108, 111 ] }
为什么使用 Buffer
- 实际的数据传输都是二进制数据,字符串在底层也会先被转为二进制数据再传输。
- 平时前后端交互多用 JSON,以字符串的形式交换数据。但是有时候(特别是在较为底层的网络协议中)需要以二进制的形式读写数据,此时无法用字符串。
有了 toString ,为什么还需要了解 toJSON
因为存在许多不可打印的字符。假设服务端传来的 buffer 是 [0x00, 0x00],那么打印出来就是一片空白。