Node.js_Buffer 缓冲区

Buffer 缓冲区node

虽然 JavaScript 支持未操做,可是并无 二进制数据 的原生程序员

node 引入了 Buffer 类,用于操做二进制数据数组

是 V8 引擎的扩展,其实是对内存的直接分配安全

每一个元素大小是 1 字节网络

建立了一个 Buffer 后,它的大小就固定了
性能

一旦你把内容复制到一个 Buffer 后,它就会以二进制的形式存储起来。spa

若是你须要添加更多的数据,就必须把 老的 Buffer 复制到一个更大的 Buffer 中3d

这是为了性能而牺牲了一些程序员的开发便利code

计算机的工做原理是操做“开”和“关”状态。blog

由于只有这样两种状态,因此咱们称此为二元状态直接操做二进制一般是最快的方法。

在网络协议中,一般会指定一些字符来传达信息

好比用固定位置上的比特来表示特殊的含义

在 DNS 请求中,头两个字节表示的数字是事务 ID,下一个字节的每一个比特都是独立使用的,

每一位表示了在这个请求中是否使用 DNS 的某个功能

 

1. 基本使用

  • 建立一个 Buffer
  • let aBuf = Buffer.alloc(参数);
  • 不安全,可能包含旧数据,须要重写全部数据
  • let bBuf  = Buffer.allocUnsafe(参数);
  • 不安全,可能包含旧数据,须要重写全部数据

能够使用 3 种参数

  • 指定 Buffer 的字节长度
  • 须要拷贝到 Buffer 里的字节数组
  • 须要拷贝到 Buffer 里的字符串
  • console.log() 打印时,以 16 进制显示
  • 一个数据,就是一个字节,就是 8 个位
  • 一个字符,就是一个字节,方便数据的显示
  • Buffer 保存 3 个字符(好比 RGB 颜色值)
  • let aColor = new Buffer([255,0,149]);    // <Buffer ff 00 95>
  • 获取 Buffer 长度

aBuf.length

  • 填充 Buffer 内容

var cBuf = Buffer.allocUnsafe(10);

cBuf.fill(0);

  • 将 字符串 转换为 Buffer

var bufStr = Buffer.from('Hello Bat-Man');

// <Buffer 48 65 6c 6c 6f 20 42 61 74 2d 4d 61 6e>

一个中文占用 3 个字节

var hanZi = Buffer.from('绿巨人');

// <Buffer e7 bb bf e5 b7 a8 e4 ba ba>

  • 将 Buffer 转换为 字符串

var strBuf = bufStr.toString();

// 'haha'

5

5

5

5

5

5

5

5

5

5

55

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

5

相关文章
相关标签/搜索