微信小程序 Node.js (基礎六) Buffer(緩衝區)

微信小程序 Node.js  Buffer:javascript

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

建立Buffer

1.長度爲10的實例
var buf = new Buffer(10)
2.經過給定的數組建立
var buf = new Buffer([10,20,30,40,50])
3.經過字符串建立
var buf = new Buffer("www.csdn.net","utf-8")
utf-8 是默認的編碼方式
支持如下編碼:"ascii", "utf8", "utf16le", "ucs2", "base64" 和 "hex"。
  •  

寫入緩存區.write()

var buf = new Buffer(200)
var len = buf.write("www.csdn.net")
console.log("寫入字節數:" + len)
  •  
  • string - 寫入緩衝區的字符串。
  • offset - 緩衝區開始寫入的索引值,默認爲 0 。
  • length - 寫入的字節數,默認爲 buffer.length
  • encoding - 使用的編碼。默認爲 ‘utf8’ 。

緩存區讀取.toString()

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
  •  
  • encoding - 使用的編碼。默認爲 ‘utf8’ 。
  • start - 指定開始讀取的索引位置,默認爲 0。
  • end - 結束位置,默認爲緩衝區的末尾。

Buffer轉JSON

var buf = new Buffer('www.runoob.com');
var json = buf.toJSON(buf);
console.log(json);
  •  

合併 Buffer.concat([,])

var buf = new Buffer("北京")
var buf1 = new Buffer("上海")
var buf2 = Buffer.concat([buf,buf1],12)
console.log(buf2.toString())
  •  
  • list用於合併的 Buffer 對象數組列表
  • totalLength指定合併後Buffer對象的總長度。

比較 .compare(otherBuffer)

在 Node.js v0.12.2 版本引入node

var buffer1 = new Buffer("AVCX")
var buffer2 = new Buffer("ACVV")

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 + "以後");
}
  •  

拷貝 .compare(buffer2)

buf.copy(targetBuffer[, targetStart[, sourceStart[, sourceEnd]]])
  •  
  • targetBuffer - 要拷貝的 Buffer 對象。
  • targetStart - 數字, 可選, 默認: 0
  • sourceStart - 數字, 可選, 默認: 0
  • sourceEnd - 數字, 可選, 默認: buffer.length
var buf1 = new Buffer("beiJing")
var buf2 = new Buffer(8)
buf1.copy(buf2)
console.log("buf2 content:"+buf2.toString())
  •  

剪裁 .slice(buffer2)

buf.slice([start[, end]])
  •  
  • start - 數字, 可選, 默認: 0
  • end - 數字, 可選, 默認: buffer.length 
    返回值 
    返回一個新的緩衝區,它和舊緩衝區指向同一塊內存,可是從索引 start 到 end 的位置剪切。
var buf1 = new Buffer("beiJing")
var buf2 = buf1.slice(0,8)
console.log("buf2 content:"+buf2)
// beiJing
  •  

長度 .length

buf.length;
  •  

//返回這個 buffer 的 bytes 數。注意這未必是 buffer 裏面內容的大小。length 是 buffer 對象所分配的內存數,它不會隨着這個 buffer 對象內容的改變而改變。json

相關文章
相關標籤/搜索