Node.js緩衝

來源:互聯網
上載者:User

標籤: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 - 數字, 可選, 預設: 0

  • end - 數字, 可選, 預設: buffer.length

傳回值

返回一個新的緩衝區,它和舊緩衝區指向同一塊記憶體,但是從索引 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緩衝

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.