1.注意點
下面的代碼是一個大標題一個文件,所以變量名存在重複,單純的看不影響,如果想拷貝出去 請分開拷貝。
2.創建buffer對象
// 創建Buffer對象的3種方法
//1. Buffer.alloc(length,填充物,編碼)
const buf1=Buffer.alloc(10,1);
console.log(buf1); // <Buffer 01 01 01 01 01 01 01 01 01 01>
// 2.Buffer.allocUnsafe(length)
// 效率高,但不安全 可能包含舊數據 需使用fill()或者write()重寫
const buf2=Buffer.allocUnsafe(10);
buf2.fill(1);
console.log(buf2); // <Buffer 01 01 01 01 01 01 01 01 01 01>
// 3.Buffer.from()
// 接收四種類型的參數 array、string、arrayBuffer、buffer
// 第二個參數指定字符集:ascii utf8 utf16le base64 latin1(binary) hex
let arrayBuf=Buffer.from([1,2,3]);
console.log(arrayBuf); // <Buffer 01 02 03>
let game='王者榮耀';
let stringBuf=Buffer.from(game,'utf8');
console.log(stringBuf); // <Buffer e7 8e 8b e8 80 85 e8 8d a3 e8 80 80>
let copyBuf1=Buffer.from(arrayBuf);
console.log(copyBuf1); // <Buffer 01 02 03>
let copyBuf2=Buffer.from(buf1);
console.log(copyBuf2); // <Buffer 01 01 01 01 01 01 01 01 01 01>
3. buffer和字符串的轉換
// 1.toString()方法可以將buffer轉換成字符串
let game='王者榮耀';
let buffer=Buffer.from(game);
console.log(buffer); // <Buffer e7 8e 8b e8 80 85 e8 8d a3 e8 80 80>
console.log(buffer.toString()); //王者榮耀
// 2.StringDecoder 將buffer轉成字符串
// 先導入這個類
let stringDecoder=require('string_decoder').StringDecoder;
// 實例化
let decoer=new stringDecoder('utf8');
// 轉成字符串
console.log(decoer.write(buffer));
//3. write('替換物',start-開始替換的位置,length-替換幾個字節,encoding-編碼集)
// 什麼參數都不寫 默認從0位置開始寫入 寫入的長度和替換爲的字節數保持一致
//注意點:替換物的字節長度需要和length保持一致
// 將字符串寫入buffer
buffer.write('射手',0,6,'utf8');
console.log(buffer.toString());
4. buffer和字符串的轉換
理解字節序-阮一峯 關於計算 可以看一下這個文章
let buffer=Buffer.from([1,2,3]);
console.log(buffer);
// 1.read+(?U)(Int/Float/Double)+位數(8/16/32)+?(BE/LE)
//帶U無符號 不帶U有符號
// BE:Big-endian 大端序
// LE:Little-endian 小端序
// 第一個參數爲起始位置 第二個參數爲超出時是否報錯 默認是false,超出報錯
console.log(buffer.readInt8(1));
//2.write+(Int/Float/Double)+位數(8/16/32)+(16或者32要加BE/LE)
//第一個參數爲寫入的數據 第二個是起始位置 第三個爲超出報錯的標誌
buffer.writeUInt8(127,0);
console.log(buffer);
5. buffer和JSON的轉換
let buffer=Buffer.from('王者榮耀');
//1.使用JSON.stringify將buffer轉成字符串 類型是string
let game=JSON.stringify(buffer)
console.log(game); //{"type":"Buffer","data":[231,142,139,232,128,133,232,141,163,232,128,128]}
//2.再使用JSON.parse將字符串還原成對象
gameArray=JSON.parse(game);
console.log(gameArray); // 這是一個對象
/*
{
type: 'Buffer',
data: [
231, 142, 139, 232,
128, 133, 232, 141,
163, 232, 128, 128
]
} */
console.log(Buffer.from(gameArray).toString()); // 王者榮耀
6. 拷貝與填充
這個稍微有點繞 嘗試幾次就可以了
// 1.source.copy(target,targetStart,sourceStart,sourceEnd)
// source是被拷貝者 , target是拷貝者
let buffer1=Buffer.from('王者榮耀');
let buffer2=Buffer.alloc(12);
let buffer3=Buffer.from('全軍出擊');
// 這裏是將buffer1中位置0~6的數據拷貝到buffer2的0~6的位置上
buffer1.copy(buffer2,0,0,6);
console.log(buffer1.toString()); // 王者榮耀
console.log(buffer2.toString()); // 王者
// 這裏是將buffer1中位置6~結束的數據拷貝到buffer3的0開始的位置上 長度爲buffer1中6~結束的長度
buffer1.copy(buffer3,0,6);
console.log(buffer3.toString()); // 榮耀出擊
// 2.使用特定的數字填充buffer
let buffer4=Buffer.alloc(10);
buffer4.fill(10);
console.log(buffer4); //<Buffer 0a 0a 0a 0a 0a 0a 0a 0a 0a 0a>
// 3.使用特定的字符串填充buffer
buffer4.write('a');
console.log(buffer4);
7. Buffer類方法
//1. Buffer.isBuffer方法 判斷是否是buffer類型
let buffer=Buffer.from('王者榮耀');
console.log(Buffer.isBuffer(buffer)); // true
console.log(Buffer.isBuffer('OK')); // false
//2.Buffer.byteLength 返回buffer字節數
console.log(Buffer.byteLength(buffer)); // 12
//3.Buffer.concat(Buffer_list,totalLength)方法
//注意點:如第一個參數是空數組或totalLength爲0,則返回空的buffer對象
let buffer2=Buffer.from("全軍出擊");
let buffer3=Buffer.concat([buffer,buffer2]);
console.log(buffer3.toString()); // 王者榮耀ADCarry
//4.isEncoding()方法:查看指定字符串是否是編碼集 如utf8
console.log(Buffer.isEncoding('utf8')); // true
console.log(Buffer.isEncoding('utf16le')); //true
console.log(Buffer.isEncoding('Hello World')); //false