首頁 >web前端 >前端問答 >Node.js經典技巧之Buffer(總結分享)

Node.js經典技巧之Buffer(總結分享)

WBOY
WBOY轉載
2022-02-18 17:31:242316瀏覽

這篇文章為大家帶來了關於nodejs中Buffer的相關知識,在Node.js中,Buffer類別是隨Node內核一起發布的核心庫,Buffer庫為Node.js帶來了一種儲存原始資料的方法,希望對大家有幫助。

Node.js經典技巧之Buffer(總結分享)

JavaScript 語言本身只有字串資料型,沒有二進位資料型別。

但在處理像 TCP 流或檔案流時,必須使用到二進位資料。因此在 Node.js 中,定義了一個 Buffer 類,該類別用來建立一個專門存放二進位資料的快取區。

在 Node.js 中,Buffer 類別是隨 Node 核心一起發佈的核心函式庫。 Buffer 函式庫為Node.js 帶來了一種儲存原始資料的方法,可以讓Node.js 處理二進位數據,每當需要在Node.js 中處理I/O 操作中移動的資料時,就有可能使用Buffer 函式庫。

原始資料儲存在 Buffer 類別的實例中。

一個 Buffer 類似於一個整數數組,但它對應於 V8 堆記憶體之外的一塊原始記憶體。

建立 Buffer 類別

Node Buffer 類別可以透過多種方式來建立。

方法1

建立長度為10 位元組的Buffer 實例:

var buf = new Buffer(10);

方法2

透過給定的陣列建立Buffer 實例:

var buf = new Buffer([10, 20, 30, 40, 50]);

方法3

透過一個字串來建立Buffer 實例:

var buf = new Buffer("bianchengsanmei", "utf-8");

utf-8是預設的編碼方式,此外它同樣支援以下編碼:「ascii」, “utf8”, “utf16le”, “ucs2”, “base64” 和“hex”。

寫入緩衝區

語法

寫入Node 緩衝區的語法如下所示:

buf.write(string[, offset[, length]][, encoding])

參數

參數描述如下:

  • string - 寫入緩衝區的字串。
  • offset - 緩衝區開始寫入的索引值,預設為 0 。
  • length - 寫入的位元組數,預設為 buffer.length
  • encoding - 使用的編碼。預設為 ‘utf8’ 。

傳回值

傳回實際寫入的大小。如果 buffer 空間不足, 則只會寫入部分字串。
實例

buf = new Buffer(256);len = buf.write("bi");len = buf.write("bianchengsanmei");
 console.log("写入字节数 : "+  len);

執行上述程式碼,輸出結果為:

$node main.js
写入字节数 : 15

從緩衝區讀取資料

##語法

讀取Node 緩衝區資料的語法如下所示:

buf.toString([encoding[,start[,end]]])

參數

參數描述如下:

  • #encoding - 使用的編碼。預設為 ‘utf8’ 。

  • start - 指定開始讀取的索引位置,預設為 0。

  • end - 結束位置,預設為緩衝區的結尾。

傳回值

解碼緩衝區資料並使用指定的編碼傳回字串。

實例

buf = new Buffer(26);for (var i = 0 ; i < 26 ; i++) {
  buf[i] = i + 97;}
 console.log( buf.toString('ascii'));       
 // 输出: abcdefghijklmnopqrstuvwxyzconsole.log( buf.toString('ascii',0,5));   
 // 输出: abcdeconsole.log( buf.toString('utf8',0,5));    
 // 输出: abcdeconsole.log( buf.toString(undefined,0,5)); 
 // 使用 'utf8' 编码, 并输出: abcde
執行上述程式碼,輸出結果為:

$ node main.js
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
將Buffer 轉換為JSON 物件

#語法

將Node Buffer 轉換為JSON 物件的函數語法格式如下:

buf.toJSON()

傳回值

傳回JSON 物件。

實例

var buf = new Buffer('bianchengsanmei');
var json = buf.toJSON(buf);
 console.log(json);
執行上述程式碼,輸出結果為:

{ type: 'Buffer',
  data: [ 119, 119, 119, 46, 119, 51, 99, 115, 99, 104, 111, 111, 108, 46, 99, 110 ] }
緩衝區合併

語法

Node 緩衝區合併的語法如下所示:

Buffer.concat(list[, totalLength])

參數##參數描述如下:

# list - 用於合併的Buffer 物件陣列清單。
  • totalLength - 指定合併後 Buffer 物件的總長度。
傳回值

傳回一個多個成員合併的新 Buffer 物件。

實例

var buffer1 = new Buffer('编程三昧 ');
var buffer2 = new Buffer('bi');
var buffer2 = new Buffer('bianchengsanmei');
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());
執行上述程式碼,輸出結果為:

buffer3 内容: 编程三昧 bianchengsanmei

緩衝區比較

語法

Node Buffer 比較的函數語法如下所示, 該方法在Node.js v0.12.2 版本引入:

buf.compare(otherBuffer);

參數

##參數描述如下:

otherBuffer
    - 與
  • buf 物件比較的另外一個Buffer 物件。
  • 傳回值

傳回數字,表示 buf

otherBuffer 之前,之後或相同。 實例

var buffer1 = new Buffer('ABC');var buffer2 = new Buffer('ABCD');var result = buffer1.compare(buffer2);
 if(result < 0) {
   console.log(buffer1 + " 在 " + buffer2 + "之前");}else if(result == 0){
   console.log(buffer1 + " 与 " + buffer2 + "相同");}else {
   console.log(buffer1 + " 在 " + buffer2 + "之后");}
執行上述程式碼,輸出結果為:
ABC在ABCD之前
拷貝緩衝區

語法

Node 緩衝區拷貝語法如下所示:

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])

參數

參數描述如下:

targetBuffer - 要拷貝的Buffer 物件。

    targetStart - 數字, 可選, 預設: 0
  • sourceStart - 數字, 可選, 預設: 0
  • sourceEnd - 數字, 可選, 預設: buffer.length
  • 傳回值

沒有傳回值。

實例

var buffer1 = new Buffer('ABC');
// 拷贝一个缓冲区var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());
執行上述程式碼,輸出結果為:
buffer2 content: ABC
緩衝區裁切

Node 緩衝區裁切語法如下所示:

buf.slice([start[, end]])

參數

參數描述如下:

  • start - 数字, 可选, 默认: 0
  • end - 数字, 可选, 默认: buffer.length

返回值

返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。

实例

var buffer1 = new Buffer('youj');
// 剪切缓冲区var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());

执行以上代码,输出结果为:

buffer2 content: yo

缓冲区长度

语法 Node 缓冲区长度计算语法如下所示:

buf.length;

返回值

返回 Buffer 对象所占据的内存长度。

实例

var buffer = new Buffer('bianchengsanmei');
//  缓冲区长度console.log("buffer length: " + buffer.length);

执行以上代码,输出结果为:

buffer length: 15

更多node相关知识,请访问:nodejs 教程!!

以上是Node.js經典技巧之Buffer(總結分享)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:csdn.net。如有侵權,請聯絡admin@php.cn刪除