Buffer 类型

类型介绍

  1. JavaScript 语言没有读取或操作二进制数据流的机制
  2. Node.js 中引入了 Buffer 类型是我们可以操作 TCP流 或 文件流
  3. Buffer 类型的对象类似于整数数组,但 Buffer 的大小是固定的、且在 V8 对外分配物理内存。Buffer 的大小在被创建时确定,且无法调整。(buf.length 是固定的,不允许修改)
  4. Buffer 是全局的,所以使用的时候无需 require() 的方式来加载

如何创建一个 Buffer 对象

常用 API

  1. 创建一个 Buffer 对象
// 1. 通过 Buffer.from() 创建一个 Buffer 对象

// 1.1 通过一个字节数组来创建一个 Buffer 对象
const array = [0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0xe4, 0xb8, 0x96, 0xe7, 0x95, 0x8c];
const buf = Buffer.from(array);
console.log(buf.toString('utf8')); // hello 世界

// 1.2通过字符串来创建一个 Buffer 对象
// Buffer.from(string[, encoding]);
const buf = Buffer.from('你好世界! Hello World!')
console.log(buf); // 
console.log(buf.toString()); // 你好世界! Hello World!
  1. 拼接多个 Buffer 对象为一个对象
// Buffer.concat(list[, totalLength]);
const bufferList = [];
const buf = Buffer.concat(bufferList)
  1. 获取字符串对应的字节个数
// Buffer.byteLength(string[, encoding]);

const len = Buffer.byteLength('你好世界 hello world!', 'utf8');
console.log(len);   // 25
  1. 判断一个对象是否是 Buffer 类型对象
// Buffer.isBuffer(obj);
// obj 
// Returns: 
// Returns true if obj is a Buffer, false otherwise.

  1. 获取 Buffer 中的某个字节
// 根据索引获取 Buffer 中的某个字节(byte, octet)
// buf[index]
  1. 获取 Buffer 对象中的字节的个数
// buf.length
注意:length 属性不可修改
  1. 已过时的 API
// 以下 API 已全部过时
new Buffer(array)
new Buffer(buffer)
new Buffer(arrayBuffer[, byteOffset [, length]])
new Buffer(size)
new Buffer(string[, encoding])

Buffer 对象与编码

Node.js 目前支持的编码如下:

  1. ascii
  2. utf8
  3. utf16le - ucs2 是 utf16le 的别名
  4. base64
  5. latin1 - binary 是 latin1 的别名
  6. hex - 用两位16进制来表示每个字节

示例代码:

const buf = Buffer.from('你好世界,Hello World!', 'utf8')

console.log(buf.toString('hex'))
console.log(buf.toString('base64'))
console.log(buf.toString('utf8'))

为什么会有 Buffer 类型?

  1. Buffer是用来临时存储一些数据(二进制数据)
  2. 当我们要把一大块数据从一个地方传输到另一个地方的时候,可以通过 BUffer 对象进行传输
  3. 通过 Buffer 每次可以传输小部分数据,直到所有数据都传输完毕

你可能感兴趣的:(Buffer 类型)