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() 函数 接受单个参数的 encodingtoString() 函数允许您根据编码将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
© 版权声明
评论 抢沙发

请登录后发表评论