NodeJs 之Buffer(緩衝區)

前言

JavaScript 語言自身只有字符串數據類型,沒有二進制數據類型。

但在處理像TCP流或文件流時,必須使用到二進制數據。因此在 Node.js中,定義了一個 Buffer 類,該類用來創建一個專門存放二進制數據的緩存區。

在 Node.js 中,Buffer 類是隨 Node 內核一起發佈的核心庫。Buffer 庫爲 Node.js 帶來了一種存儲原始數據的方法,可以讓 Node.js 處理二進制數據。

來認識一下 Buffer , 例舉幾種常見的創建 Buffer 類 , 更多請查看官方文檔

//使用new Buffer(size)方式創建一個Buffer實例:
var buf = new Buffer(10);
console.log("buf: ", buf);

//使用new Buffer(array)方式創建一個Buffer實例:
var buf2 = new Buffer(['runoob', 'ascii']);
console.log("buf2: ", buf2);

//使用new Buffer(str[,encoding])方式創建一個Buffer實例:
var buf3 = new Buffer('hisen', 'utf-8');
console.log('buf3: ', buf3)

輸出結果

PS C:\HiSen\myWorkDemo\node_demo> node buffer.js
buf:  <Buffer 00 00 00 00 00 00 00 00 00 00>
buf2:  <Buffer 00 00>
buf3:  <Buffer 68 69 73 65 6e>
PS C:\HiSen\myWorkDemo\node_demo>

結論:
一個Buffer對象的大小,在創建時就固定下來,創建之後不可改變

Buffer 常用方法

write 寫入 Node 緩衝區

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

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

// 寫入緩衝區
var buf5 = Buffer.alloc(123);
len = buf5.write("https://blog.csdn.net/HiSen_CSDN");

console.log("寫入字節數 : " + len); // 寫入字節 32
console.log(buf5) // <Buffer 68 74 74 70 73 3a 2f 2f 62 6c 6f 67 2e 63 73 64 6e 2e 6e 65 74 2f 48 69 53 65 6e 5f 43 53 44 4e 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ... >

根據 encoding 的字符編碼寫入 string 到 buf 中的 offset 位置。 length 參數是寫入的字節數。 如果 buf 沒有足夠的空間保存整個字符串,則只會寫入 string 的一部分。 只部分解碼的字符不會被寫入。

toString() 讀取Node 緩衝區

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

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

參數:
encoding - 使用的編碼。默認爲 ‘utf8’ 。
start - 指定開始讀取的索引位置,默認爲 0。
end - 結束位置,默認爲緩衝區的末尾。

// buffer 字符串編碼,轉換不同格式
const buf4 = Buffer.from('Hisen', 'ascii');
console.log(buf4.toString('hex'));  // 輸出 486973656e
console.log(buf4.toString('base64')); // 輸出 SGlzZW4=

當然了,現在Js有一個 atob || btoa 的方式來進行 base64 和 二進制的轉換。也是很方便的。

NodeJs 目前支持的字符串編碼

ascii - 僅支持 7 位 ASCII 數據。如果設置去掉高位的話,這種編碼是非常快的。
utf8 - 多字節編碼的 Unicode 字符。許多網頁和其他文檔格式都使用 UTF-8 。
utf16le - 2 或 4 個字節,小字節序編碼的 Unicode 字符。支持代理對(U+10000 至 U+10FFFF)。
ucs2 - utf16le 的別名。
base64 - Base64 編碼。
latin1 - 一種把 Buffer 編碼成一字節編碼的字符串的方式。
binary - latin1 的別名。
hex - 將每個字節編碼爲兩個十六進制字符。

其實 Buffer 類還有格式轉換,合併,比較,拷貝,等功能,這裏呢也不做多餘的樣例,其實我個人感覺應用場景可能就是 :操作二進制數據流,數據格式轉換。哈哈哈 ~ 後續有更深的理解了,再補錄。各位童鞋見諒哈。

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