nodejs基礎之buffer緩衝區用法分析

這篇文章主要介紹了nodejs基礎之buffer緩衝區用法,結合實例形式分析了buffer緩衝區的概念、功能、創建、讀寫等相關操作技巧,需要的朋友可以參考下

本文實例講述了nodejs基礎之buffer緩衝區用法。分享給大家供大家參考,具體如下:

JavaScript 語言自身只有字符串數據類型,沒有二進制數據類型。但在處理像TCP流或文件流時,必須使用到二進制數據。因此在 Node.js中,定義了一個 Buffer 類,該類用來創建一個專門存放二進制數據的緩存區。在 Node.js 中,Buffer 類是隨 Node 內核一起發佈的核心庫。Buffer 庫爲 Node.js 帶來了一種存儲原始數據的方法,可以讓 Node.js 處理二進制數據,每當需要在Node.js 中處理I/O操作中移動的數據時,就有可能使用 Buffer 庫。原始數據存儲在 Buffer 類的實例中。一個 Buffer 類似於一個整數數組,但它對應於 V8 堆內存之外的一塊原始內存。

創建buffer類

1、創建長度爲指定字節的buffer實例

var buffer = new Buffer(10); //創建長度爲10字節的buffer實例

2、通過數組創建buffer實例

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

3、通過一個字符串來創建buffer實例

var buffer = new Buffer('www.google.com','utf-8');
//utf-8 是默認的編碼方式,此外還可以指定以下編碼:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"

緩衝區長度

語法:

buf.length;

返回值:

返回 Buffer 對象所佔據的內存長度。

實例:

var buffer = new Buffer('www.runoob.com');
// 緩衝區長度
console.log("buffer length: " + buffer.length); //buffer length: 14

寫入緩衝區

語法:

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

參數:

  • string:寫入緩衝區的字符串。
  • offset:緩衝區開始寫入的索引值,默認爲 0 。
  • length:寫入的字節數,默認爲 buffer.length
  • encoding:使用的編碼。默認爲 'utf8' 。

返回值:

返回實際寫入的大小(number類型)。如果 buffer 空間不足, 則只會寫入部分字符串。

實例:

buf = new Buffer(256);
len = buf.write("www.runoob.com");
console.log("寫入字節數 : "+ len); //寫入字節數 : 14

從緩衝區讀取數據

語法:

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

參數:

  • encoding:使用的編碼,默認爲utf-8
  • start:指定開始讀取的索引位置,默認爲0
  • end:指定讀取的結束位置,默認爲緩衝區的末尾

返回值:

解碼緩衝區數據,並使用指定的編碼返回字符串

實例:

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
 buf[i] = i + 97;
}
console.log( buf.toString('ascii'));  // 輸出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // 輸出: abcde
console.log( buf.toString('utf8',0,5)); // 輸出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 編碼, 並輸出: abcde

buffer對象轉換成json對象

語法:

toJSON()方法

返回值:

json對象

實例:

var buf = new Buffer('www.google.com');
var json = buf.toJSON(buf);
console.log(json); //[ 119, 119, 119, 46, 103, 111, 111, 103, 108, 101, 46, 99, 111, 109 ]

緩衝區合併

語法:

Buffer.concat(list[, totalLength])

參數:

  • list:用於合併的 Buffer 對象數組列表。
  • totalLength:指定合併後Buffer對象的總長度。

返回值:

返回一個多個成員合併的新 Buffer 對象。

實例:

var buf1 = new Buffer("谷歌網址:");
var buf2 = new Buffer("www.google.com");
var buf3 = Buffer.concat([buf1,buf2]);
console.log('buf1的內容爲:'+buf1.toString()); //buf1的內容爲:谷歌網址:
console.log('buf2的內容爲:'+buf2.toString()); //buf2的內容爲:www.google.com
console.log('buf3的內容爲:'+buf3.toString()); //buf3的內容爲:谷歌網址:www.google.com

緩衝區拷貝

語法:

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

參數:

參數描述如下:

  • targetBuffer - 要拷貝的 Buffer 對象。
  • targetStart - 數字, 可選, 默認: 0
  • sourceStart - 數字, 可選, 默認: 0
  • sourceEnd - 數字, 可選, 默認: buffer.length

返回值:

沒有返回值。

實例:

var buf1 = new Buffer('ABC');
// 拷貝一個緩衝區
var buf2 = new Buffer(2);
var buf3 = new Buffer(3);
var buf4 = new Buffer(5);
var buf5 = new Buffer('abcdef');
buf1.copy(buf2);
buf1.copy(buf3);
buf1.copy(buf4);
buf1.copy(buf5);
console.log("buf2 content: " + buf2.toString()); //buf2 content: AB
console.log("buf3 content: " + buf3.toString()); //buf3 content: ABC
console.log("buf4 content: " + buf4.toString()); //buf4 content: ABC 因爲開闢出來的內存大了些,所以這裏接一堆怪符號
console.log("buf5 content: " + buf5.toString()); //buf5 content: ABCdef

緩衝區裁剪

語法:

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

參數:

參數描述如下:

  • start - 數字, 可選, 默認: 0
  • end - 數字, 可選, 默認: buffer.length

返回值:

返回一個新的緩衝區,它和舊緩衝區指向同一塊內存,但是從索引 start 到 end 的位置剪切。

實例:

var buffer1 = new Buffer('runoob');
// 剪切緩衝區
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString()); //buffer2 content: ru

希望本文所述對大家nodejs程序設計有所幫助。

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