Node.js Buffer 是存储任意二进制数据的对象。Buffers 的最常见原因是 使用 Node.js 读取文件 :
const fs = require(fs);
const buf = fs.readFileSync(./package.json);
buf instanceof Buffer; // true
buf; // <Buffer 7b 0a 20 20 22 6e 61 6d 65 22 ...>
Buffers 有一个 toString()
函数 接受单个参数的 encoding
,toString()
函数允许您根据编码将Buffer转换为有意义的字符串。 例如,如果您阅读一个普通的文本文件,使用 fs.readFile()
,您可以使用将Buffer转换为文件中的文本 .toString(utf8)
:
const fs = require(fs);
const buf = fs.readFileSync(./package.json);
buf.toString(utf8); // { name: masteringjs.io, ...}
另一种常见的编码是 hex
,它将 Buffers 编码为字符串 [0-9A-F]
, 十六进制编码很有用,因为它不需要转义 – 您可以将十六进制编码的Buffer放入 URI 中,而无需使用 encodeURIComponent()
或将其放入 JSON 中而不转义 ,因为十六进制编码只包含字母数字字符。
const fs = require(fs);
const buf = fs.readFileSync(./package.json);
buf.toString(hex); // 7b0a2020...
创建新 Buffer
您可以使用从字符串创建 Buffers Buffer.from()
功能 。 喜欢 toString()
,你可以 通过 encoding
论据 Buffer.from()
。
let buf = Buffer.from(Hello, World, utf8);
buf.toString(hex); // 48656c6c6f2c20576f726c64
buf.toString(utf8); // Hello, World
buf = Buffer.from(48656c6c6f2c20576f726c64, hex);
buf.toString(utf8); // Hello, World
Buffer.from()
函数还接受数组和 Buffers。 您可以使用 Buffer.from()
克隆 Buffers:
const buf2 = Buffer.from(buf);
buf2 === buf; // false
buf2.toString(utf8); // Hello, World
或从数字字节数组:
const buf = Buffer.from([
0x48,
0x65,
0x6c,
0x6c,
0x6f,
0x2c,
0x20,
0x57,
0x6f,
0x72,
0x6c,
0x64
]);
buf.toString(utf8); // Hello, World
和 JSON.stringify()
JSON.stringify()
函数将Buffer转换为对象 。 原始数据被编码为一个字节数组,您可以将其传递给 Buffer.from()
。
let buf = Buffer.from(Hello, World, utf8);
let obj = { buffer: buf };
obj = JSON.parse(JSON.stringify(obj));
// { type: Buffer,
// data: [ 72, 101, 108, 108, 111, 44, 32, 87, 111, 114, 108, 100 ] }
obj.buffer;
// To convert from JSON representation back to a buffer, use `Buffer.from()`
obj.buffer = Buffer.from(obj.buffer);
obj.buffer.toString(utf8); // Hello, World
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
请登录后查看评论内容