標籤:origin binary pen bsp 處理 har 需要 key 傳回值
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 與字元編碼
Buffer 執行個體一般用於表示編碼字元的序列,比如 UTF-8 、 UCS2 、 Base64 、或十六進位編碼的資料。 通過使用顯式的字元編碼,就可以在 Buffer 執行個體與普通的 JavaScript 字串之間進行相互轉換。
const buf = Buffer.from(‘runoob‘, ‘ascii‘);// 輸出 72756e6f6f62console.log(buf.toString(‘hex‘));// 輸出 cnVub29iconsole.log(buf.toString(‘base64‘));
Node.js 目前支援的字元編碼包括:
ascii - 僅支援 7 位 ASCII 資料。如果設定去掉高位的話,這種編碼是非常快的。
utf8 - 多位元組編碼的 Unicode 字元。許多網頁和其他文檔格式都使用 UTF-8 。
utf16le - 2 或 4 個位元組,小位元組序編碼的 Unicode 字元。支援代理對(U+10000 至 U+10FFFF)。
ucs2 - utf16le 的別名。
base64 - Base 64 編碼。
latin1 - 一種把 Buffer 編碼成一位元組編碼的字串的方式。
binary - latin1 的別名。
hex - 將每個位元組編碼為兩個十六進位字元。
將 Buffer 轉換為 JSON 對象文法
將 Node Buffer 轉換為 JSON 對象的函數文法格式如下:
buf.toJSON()
當字串化一個 Buffer 執行個體時,JSON.stringify() 會隱式地調用該 toJSON()。
傳回值
返回 JSON 對象。
執行個體
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5]);const json = JSON.stringify(buf);// 輸出: {"type":"Buffer","data":[1,2,3,4,5]}console.log(json);const copy = JSON.parse(json, (key, value) => { return value && value.type === ‘Buffer‘ ? Buffer.from(value.data) : value;});// 輸出: <Buffer 01 02 03 04 05>console.log(copy);
執行以上代碼,輸出結果為:
{"type":"Buffer","data":[1,2,3,4,5]}<Buffer 01 02 03 04 05>
緩衝區裁剪
Node 緩衝區裁剪文法如下所示:
buf.slice([start[, end]])
參數
參數描述如下:
傳回值
返回一個新的緩衝區,它和舊緩衝區指向同一塊記憶體,但是從索引 start 到 end 的位置剪下。
執行個體
var buffer1 = Buffer.from(‘runoob‘);// 剪下緩衝區var buffer2 = buffer1.slice(0,2);console.log("buffer2 content: " + buffer2.toString());
執行以上代碼,輸出結果為:
buffer2 content: ru
裁剪功能返回的實際是原始緩衝區 buffer 或者一部分,操作的是與原始 buffer 同一塊記憶體地區。
// 裁剪var buffer_origin = Buffer.from(‘runoob‘);var buffer_slice = buffer_origin.slice(0,2);console.log("buffer slice content: "+buffer_slice.toString());console.log("buffer origin content: "+buffer_origin.toString());buffer_slice.write("wirte"); // Write buffer slice// 裁剪前與原始字串的改變console.log("buffer slice content: "+buffer_slice.toString());console.log("buffer origin content: "+buffer_origin.toString());
輸出:
buffer slice content: rubuffer origin content: runoobbuffer slice content: wibuffer origin content: winoob
可以看到對裁剪返回的 buffer 進行寫操作同時,也對原始 buffer 進行了寫操作。
摘自:http://www.runoob.com/nodejs/nodejs-buffer.html
Node.js緩衝