类型介绍
- JavaScript 语言没有读取或操作二进制数据流的机制
- Node.js 中引入了 Buffer 类型是我们可以操作 TCP流 或 文件流
- Buffer 类型的对象类似于整数数组,但 Buffer 的大小是固定的、且在 V8 对外分配物理内存。Buffer 的大小在被创建时确定,且无法调整。(buf.length 是固定的,不允许修改)
- Buffer 是全局的,所以使用的时候无需 require() 的方式来加载
如何创建一个 Buffer 对象
常用 API
- 创建一个 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); // <Buffer e4 bd a0 e5 a5 bd e4 b8 96 e7 95 8c ef bc 81 20 48 65 6c 6c 6f 20 57 6f 72 6c 64 21>
console.log(buf.toString()); // 你好世界! Hello World!
- 拼接多个 Buffer 对象为一个对象
// Buffer.concat(list[, totalLength]);
const bufferList = [];
const buf = Buffer.concat(bufferList)
- 获取字符串对应的字节个数
// Buffer.byteLength(string[, encoding]);
const len = Buffer.byteLength('你好世界 hello world!', 'utf8');
console.log(len); // 25
- 判断一个对象是否是 Buffer 类型对象
// Buffer.isBuffer(obj);
// obj <object>
// Returns: <boolean>
// Returns true if obj is a Buffer, false otherwise.
- 获取 Buffer 中的某个字节
// 根据索引获取 Buffer 中的某个字节(byte, octet)
// buf[index]
- 获取 Buffer 对象中的字节的个数
// buf.length
注意:length 属性不可修改
- 已过时的 API
// 以下 API 已全部过时
new Buffer(array)
new Buffer(buffer)
new Buffer(arrayBuffer[, byteOffset [, length]])
new Buffer(size)
new Buffer(string[, encoding])
Buffer 对象与编码
Node.js 目前支持的编码如下:
- ascii
- utf8
- utf16le - ucs2 是 utf16le 的别名
- base64
- latin1 - binary 是 latin1 的别名
- 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 类型?
- Buffer是用来临时存储一些数据(二进制数据)
- 当我们要把一大块数据从一个地方传输到另一个地方的时候,可以通过 BUffer 对象进行传输
- 通过 Buffer 每次可以传输小部分数据,直到所有数据都传输完毕
网友评论