- Buffer 用于處理二進制數(shù)據(jù)流
- 實例類似證書數(shù)組,大小固定
- C++ 代碼在 V8 堆外分配物理內(nèi)存
例子
// 創(chuàng)建一個長度為 10、且用 0 填充的 Buffer。
const buf1 = Buffer.alloc(10);
// 創(chuàng)建一個長度為 10、且用 0x1 填充的 Buffer。
const buf2 = Buffer.alloc(10, 1);
// 創(chuàng)建一個長度為 10、且未初始化的 Buffer。
// 這個方法比調(diào)用 Buffer.alloc() 更快,
// 但返回的 Buffer 實例可能包含舊數(shù)據(jù),
// 因此需要使用 fill() 或 write() 重寫。
const buf3 = Buffer.allocUnsafe(10);
// 創(chuàng)建一個包含 [0x1, 0x2, 0x3] 的 Buffer。
const buf4 = Buffer.from([1, 2, 3]);
// 創(chuàng)建一個包含 UTF-8 字節(jié) [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
// 創(chuàng)建一個包含 Latin-1 字節(jié) [0x74, 0xe9, 0x73, 0x74] 的 Buffer。
const buf6 = Buffer.from('tést', 'latin1');
Buffer 類的方法
Buffer.alloc

image
Buffer.from

image

image
Buffer.concat

image
buf 實例的方法
buf.length
返回 buf 實例的字節(jié)長度
英文字符,一個字母占一個字節(jié)

image
中文字符,一個中文字符占3個字節(jié)

image
buf.fill
填充 buf 實例。

image
buf.indexOf
搜索位置,返回找到第一個索引值,類似于數(shù)組的 indexOf

image
Buffer 處理中文亂碼問題
例子

image
const {StringDecoder} = require('string_decoder');
console.log(StringDecoder);
let decoder = new StringDecoder('utf8');
let buf = Buffer.from('中文字符串');
console.log('\n中文亂碼問題: \n');
for (let i = 0; i < buf.length; i += 5) {
let b = Buffer.alloc(5);
buf.copy(b, 0, i);
console.log(b.toString());
} //打印出來亂碼
console.log('\n 用 StringDecoder 解決: \n');
for (let i = 0; i < buf.length; i += 5) {
let b = Buffer.alloc(5);
buf.copy(b, 0, i);
console.log(decoder.write(b));
} //打印出正常的中文字符

image