socks 专栏 —— 2. 认识 Buffer

·  阅读 49

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

  1. 实际的数据传输都是二进制数据,字符串在底层也会先被转为二进制数据再传输。
  2. 平时前后端交互多用 JSON,以字符串的形式交换数据。但是有时候(特别是在较为底层的网络协议中)需要以二进制的形式读写数据,此时无法用字符串。

有了 toString ,为什么还需要了解 toJSON

因为存在许多不可打印的字符。假设服务端传来的 buffer 是 [0x00, 0x00],那么打印出来就是一片空白。

分类:
前端
标签:
收藏成功!
已添加到「」, 点击更改