Node中buffer模塊使用

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章