buffer用於處理理二進制數據,在v8堆外分配物理理內存,buffer實例例類似0-255之間的整數數組,顯
示的數據爲十六進制,大小是固定的,無法修改。
一. 創建buffer
- Buffer.alloc(size[, fill[, encoding]]):
size 新 Buffer 的所需長度。
fill ||| 用於預填充新 Buffer 的值。默認值: 0 。
encoding 如果 fill 是一個字符串串,則這是它的字符編碼。默認值: ‘utf8’
console.log(Buffer.alloc(10));//創建⼀一個⻓長度爲10的Buffer,默認填充0
console.log(Buffer.alloc(10,2));//創建⼀一個⻓長度爲10的Buffer,填充2
console.log(Buffer.alloc(10,100));//創建⼀一個⻓長度爲10的Buffer,填充1000
console.log(Buffer.alloc(10,-1));//創建⼀一個⻓長度爲10的Buffer,-1強制轉換成
255
- Buffer.allocUnsafe(size):
size 新 Buffer 的所需長度。
console.log(Buffer.allocUnsafe(10));//創建⼀一個⻓長度爲10未初始化的buffer
- Buffer.from(array):
array 整數數組
console.log(Buffer.from([1,2,3]));//創建buffer,填充[1,2,3]
- Buffer.from(string[, encoding]):
string 要編碼的字符串串。
encoding string 的字符編碼。默認值: ‘utf8’
console.log(Buffer.from('eric')); //創建buffer,填充字符串串
console.log(Buffer.from('eric','base64')); //創建buffer,填充bese64編碼的
字符串串
標題Buffer類上常用的屬性、方法
- Buffer.byteLength: 返回字符串串的字節長度
console.log(Buffer.byteLength('eric'));//返回字符串串的字節⻓長度,4
console.log(Buffer.byteLength('中⽂文'));//6,⼀一個⽂文字代表3個字節
- Buffer.isBuffer(obj): 判斷是否是buffer
console.log(Buffer.isBuffer({}));
console.log(Buffer.isBuffer(Buffer.from('eric')));
- Buffer.concat(list[, totalLength]): 合併buffer
const buf = Buffer.from('hello');
const buf2 = Buffer.from('eric');
console.log(buf);
console.log(buf2);
console.log(Buffer.concat([buf,buf2]));
console.log(Buffer.concat([buf,buf2],10));
- buf.write(string[, offset[, length]][, encoding])將字符寫⼊入buffer,返回已經寫⼊入的字節數
- string 要寫入 buf 的字符串串。
- offset 從指定索引下寫⼊入。默認值: 0 。
- length 要寫⼊入的字節數。默認值: buf.length - offset 。
- encoding 字符串串的字符編碼。默認值: ‘utf8’ 。
const buf = Buffer.allocUnsafe(20);
console.log(buf);
// console.log(buf.write('buffer'));
console.log(buf.write('buffer',5,3));
console.log(buf);
- buf.fill(value[, offset[, end]][, encoding]) 填充buffer
- value | | | ⽤用來填充 buf 的值。
- offset 開始填充 buf 的索引。默認值: 0 。
- end 結束填充 buf 的索引(不不包含)。默認值: buf.length 。
- encoding 如果 value 是字符串串,則指定 value 的字符編碼。默認值: ‘utf8’ 。
console.log(buf.fill('eric',5,10));
- buf.length buffer的⻓長度
- buf.toString([encoding[, start[, end]]]) 將buffer解碼成字符串串形式
- encoding 使⽤用的字符編碼。默認值: ‘utf8’ 。
- start 開始解碼的字節索引。默認值: 0
- end 結束解碼的字節索引(不不包含)。默認值: buf.length 。
const buf = Buffer.from('test');
console.log(buf.toString('utf8',1,3));
- buf.toJSON 返回 buffer 的 JSON 格式
const buf = Buffer.from('test');
console.log(buf.toJSON());
- buf.equals(otherBuffer) 對⽐比其它buffer是否具有完全相同的字節
- otherBuffer 要對⽐比的buffer
const buf1 = Buffer.from('ABC');
const buf2 = Buffer.from('414243', 'hex');
const buf3 = Buffer.from('ABCD');
console.log(buf1);
console.log(buf2);
console.log(buf1.equals(buf2));
// 打印: true
console.log(buf1.equals(buf3));
- buf.indexOf/lastIndexOf 查找指定的值對應的索引
- buf.slice([start[, end]]) 切割buffer
- start 新 Buffer 開始的位置。默認值: 0
- end 新 Buffer 結束的位置(不不包含)。默認值: buf.length 。
const buf = Buffer.from('abcdefghi');
console.log(buf.slice(2,7).toString());//cdefg
- buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]]) 拷⻉貝buffer
- target | 要拷⻉貝進的 Buffer 或 Uint8Array 。
- targetStart ⽬目標 buffer 中開始寫⼊入之前要跳過的字節數。默認值: 0 。
- sourceStart 來源 buffer 中開始拷⻉貝的索引。默認值: 0 。
- sourceEnd 來源 buffer 中結束拷⻉貝的索引(不不包含)。默認值: buf.length 。
const buf = Buffer.from('abcdefghi');
const buf2 = Buffer.from('test');
// console.log(buf.slice(2,7).toString());
// console.log(buf.copy(buf2));
// console.log(buf2.toString());
console.log(buf2.copy(buf,2,1,3));
console.log(buf.toString());