1. Buffer创建
- JavaScript 语言自身只有字符串数据类型,没有二进制数据类型;
- 但在处理像TCP流或文件流时,必须使用到二进制数据。因此在 Node.js中,定义了一个 Buffer 类,该类用来创建一个专门存放二进制数据的缓存区。
1-1. alloc()
let buffer = Buffer.alloc(10);
console.log(buffer);
1-2. from()
let buffer = Buffer.from("大家好");
console.log(buffer);
2. Buffer中的方法
2-1. toString()
let buffer = Buffer.from("大家好");
console.log(buffer.toString());
2-2. concat()
let buffer1 = Buffer.from([0xe5, 0xa4, 0xa7, 0xe5]);
let buffer2 = Buffer.from([0xae, 0xb6, 0xe5, 0xa5, 0xbd]);
let buffer = Buffer.concat([buffer1, buffer2]);
console.log(buffer.toString());
2-3. string_decoder()
- 它的特殊之处在于,当传入的buffer不完整(比如三个字节的字符,只传入了两个),内部会维护一个internal buffer将不完整的字节cache住,等到使用者再次调用stringDecoder.write(buffer)传入剩余的字节,来拼成完整的字符;
- 这样可以有效避免buffer不完整带来的错误,对于很多场景,比如网络请求中的包体解析等,非常有用;
let { StringDecoder } = require("string_decoder");
let buffer1 = Buffer.from([0xe5, 0xa4, 0xa7, 0xe5]);
let buffer2 = Buffer.from([0xae, 0xb6, 0xe5, 0xa5, 0xbd]);
let decoder = new StringDecoder();
let res1 = decoder.write(buffer1);
let res2 = decoder.write(buffer2);
console.log(res1);
console.log(res2);