Buffer模块
目录
- Buffer简介
- Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()
- Buffer与字符编码
- Buffer 类方法
Buffer简介
Buffer
类用于在TCP流或者文件系统操作等场景中处理二进制数据流。
与之相同的有TypedArray
,已被添加进ES6中。
Buffer
类的实例类似于整数数组,但Buffer
的大小是固定的、且在V8堆外分配物理内存。Buffer
的大小在被创建时确定,且大小无法调整。Buffer
在Node.js中是一个全局变量。
const buff1 = Buffer.alloc(10);
// 创建一个长度为10、且用0填充的Buffer
const buff2 = Buffer.alloc(10, 1);
// 创建一个长度为10、且用0x1填充的Buffer
const buff3 = Buffer.from([1, 2, 3]);
// 创建一个包含 [0x1, 0x2, 0x3] 的Buffer
const buff4 = Buffer.from('tést');
// 创建一个包含 UTF-8 字节 [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer
const buff5 = Buffer.from('tést', 'latin1');
// 创建一个包含 Latin-1 字节 [0x74, 0xe9, 0x73, 0x74] 的 Buffer
Buffer.from(), Buffer.alloc(), Buffer.allocUnsafe()
-
Buffer.from(array)
返回一个新建的包含所提供的字节数组的副本的Buffer。 -
Buffer.from(buffer)
返回一个新建的包含所提供的Buffer的内容的副本的Buffer。 -
Buffer.alloc(size[, fill[, encoding]])
返回一个指定大小的被填满的Buffer实例。这个方法创建的实例不会包含旧的和潜在的敏感数据。
Buffer 与 字符编码
Buffer
实例一般用于表示编码字符的序列,比如UTF-8、UCS2、Base64、或十六进制编码的数据。通过使用显示的字符编码,就可以在Buffer
实例与普通的JavaScript字符串之间进行相互转换。
例:
const buff = Buffer.from('hello world', 'ascii');
//输出 68656c6c6f20776f726c64
console.log(buff.toString('hex'));
// 输出 aGVsbG8gd29ybGQ=
console.log(buff.toString('base64'));
Node.js 目前支持的字符编码:
ascii
- 仅支持7位ASCII数据。utf8
- 多字节编码的Unicode字符,许多网页和其他文档格式都使用UTF-8。utf16le
- 2或4个字节,小字节序编码的Unicode字符。ucs2
-utf16le
的别名。base64
- Base64编码latin1
- 一种把Buffer编码成一字节编码的字符串的方式。binary
-lantin1
的别名。hex
- 将每个字节编码为两个十六进制字符。
Buffer 类方法
Buffer.alloc(size[, fill[, encoding]])
size
Buffer长度fill
初始化值。默认为0encoding
字符编码。默认为 utf8
Buffer.allocUnsafe(size)
size
Buffer长度
该方法创建的Buffer内存是未初始化的。
Buffer.byteLength(string[, encoding])
string
要计算长度的值encoding
指定字符编码。默认为 utf8
Buffer.compare(buf1, buf2)
buf1
,buf2
要比较的两个buffer对象。
Buffer.concat(list[, totalLength])
list
需合并的Buffer数组totalLength
合并后的总长度,大于此长度会截断
Buffer.from(arrayBuffer[, byteOffset[, length]])
arrayBuffer
ArrayBuffer 或 SharedArrayBuffer,或 TypedArray 的 .buffer 属性。byteOffset
开始拷贝的索引。length
拷贝的字节数。
Buffer.isBuffer(obj)
判断是否为Buffer
Buffer.isEncoding(encoding)
判断是否为支持的字符编码
Buffer.poolSize
指定预分配的Buffer池的大小(字节为单位)。
buf.buffer
Buffer底层的ArrayBuffer对象
buf.byteOffset
Buffer底层的ArrayBuffer对象的byteOffset
buf.compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
对比buf和target,0表示相同,1表示target排在前面,-1表示target排在后面
buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
拷贝 buf 中某个区域的数据到 target 中的某个区域,即使 target 的内存区域与 buf 的重叠
buf.entries()
用 buf 的内容创建并返回一个 [index, byte] 形式的迭代器
buf.equals(otherBuffer)
如果buf和otherBuffer具有完全相同的字节,则返回true,否则返回false。
buf.fill(value[, offset[, end]][, encoding])
用指定的 value 填充 buf。 如果没有指定 offset 与 end,则填充整个 buf
buf.includes(value[, byteOffset][, encoding])
查找value是否存在
buf.indexOf(value[, byteOffset][, encoding])
存在返回首次出现的索引,不存在返回-1
buf.keys()
创建并返回 buf 键名(索引)的迭代器。
buf.lastIndexOf(value[, byteOffset][, encoding])
存在返回最后出现的索引,不存在返回-1
buf.length
返回内存中分配给 buf 的字节数。 不一定反映 buf 中可用数据的字节量。
buf.slice([start[, end]])
创建一个指向与原始 Buffer 同一内存的新 Buffer,但使用 start 和 end 进行了裁剪。
buf.toJSON()
返回buf的JSON格式
buf.toString([encoding[, start[, end]]])
根据 encoding 指定的字符编码将 buf 解码成字符串。
buf.values()
创建并返回 buf 键值(字节)的迭代器。 当对 Buffer 使用 for…of 时会调用该函数。
buf.write(string[, offset[, length]][, encoding])
根据 encoding 指定的字符编码将 string 写入到 buf 中的 offset 位置。 如果 buf 没有足够的空间保存整个字符串,则只会写入 string 的一部分。
Buffer 常量
buffer.constants.MAX_LENGTH
单个Buffer实例允许的最大内存buffer.constants.MAX_STRING_LENGTH
单个Buffer实例允许的最大长度