- Buffer 用于處理二進(jìn)制數(shù)據(jù)流
- 實(shí)例類似證書數(shù)組,大小固定
- C++ 代碼在 V8 堆外分配物理內(nèi)存
例子
// 創(chuàng)建一個(gè)長度為 10、且用 0 填充的 Buffer骡澈。
const buf1 = Buffer.alloc(10);
// 創(chuàng)建一個(gè)長度為 10晓猛、且用 0x1 填充的 Buffer判哥。
const buf2 = Buffer.alloc(10, 1);
// 創(chuàng)建一個(gè)長度為 10辕录、且未初始化的 Buffer。
// 這個(gè)方法比調(diào)用 Buffer.alloc() 更快导绷,
// 但返回的 Buffer 實(shí)例可能包含舊數(shù)據(jù),
// 因此需要使用 fill() 或 write() 重寫屎飘。
const buf3 = Buffer.allocUnsafe(10);
// 創(chuàng)建一個(gè)包含 [0x1, 0x2, 0x3] 的 Buffer妥曲。
const buf4 = Buffer.from([1, 2, 3]);
// 創(chuàng)建一個(gè)包含 UTF-8 字節(jié) [0x74, 0xc3, 0xa9, 0x73, 0x74] 的 Buffer。
const buf5 = Buffer.from('tést');
// 創(chuàng)建一個(gè)包含 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 實(shí)例的方法
buf.length
返回 buf 實(shí)例的字節(jié)長度
英文字符檐盟,一個(gè)字母占一個(gè)字節(jié)
image
中文字符,一個(gè)中文字符占3個(gè)字節(jié)
image
buf.fill
填充 buf 實(shí)例押桃。
image
buf.indexOf
搜索位置葵萎,返回找到第一個(gè)索引值,類似于數(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