javascript
中對數據處理都是以字符串的形式,而對於二進制數據就不便於處理,因此 Buffer
即是用於讀取或操做二進制數據都對象。javascript
一句話歸納: Buffer
類是一個全局變量,用於直接處理二進制數據,提供工具類方法。java
官網上關於 Buffer
解釋的很是清楚,因此就再也不拷貝官網,這裏列舉一些使用較爲頻繁的場景。數組
在操做文件或者IO的場景中,咱們須要將對象轉換成二進制數據流。函數
引用官方文檔工具
Buffer.from(array) 返回一個新的 Buffer,其中包含提供的八位字節數組的副本。ui
Buffer.from(arrayBuffer[, byteOffset [, length]]) 返回一個新的 Buffer,它與給定的 ArrayBuffer 共享相同的已分配內存。編碼
Buffer.from(buffer) 返回一個新的 Buffer,其中包含給定 Buffer 的內容的副本。spa
Buffer.from(string[, encoding]) 返回一個新的 Buffer,其中包含提供的字符串的副本。3d
Buffer.alloc(size[, fill[, encoding]]) 返回一個指定大小的新建的的已初始化的 Buffer。 此方法比 Buffer.allocUnsafe(size) 慢,但能確保新建立的 Buffer 實例永遠不會包含可能敏感的舊數據。code
Buffer.allocUnsafe(size) 和 Buffer.allocUnsafeSlow(size) 分別返回一個指定大小的新建的未初始化的 Buffer。 因爲 Buffer 是未初始化的,所以分配的內存片斷可能包含敏感的舊數據。
栗子以下
const obj = {
name:'test'
}
const buffer = Buffer.from(JSON.stringify(obj),'utf8') // 默認編碼是 utf8
複製代碼
咱們能夠看到 Buffer
對象是一個 Uint8Array
的實例,因此咱們可使用迭代器獲取 Buffer
中數組的值。
Buffer
對象轉二進制字符串,便利獲取到數組中的值,經過 Number.toString(radix)
方法,將整形轉換成二進制字符串,最後將各個數值的二進制字符串拼接起來便可。但爲了後續對二進制操做方便,因此咱們約定好二進制的長度,由於 Buffer
數組是在 0 到 255 之間的整數數組,255 的二進制是 8 位,因此咱們在轉換過程當中把不足八位的前置補零,固然這仍是得看具體的場景.bytesToBinary(bytes) {
const length = bytes.length;
let result = '';
for (let i = 0; i < length; i++) {
const binStr = Number(bytes[i]).toString(2)
result += '0'.repeat(8 - binStr.length) + binStr; // 不足八位前置補0
}
return result.toString();
}
複製代碼
bytesToBinary(bytes) {
const length = bytes.length;
let result = '';
for (let i = 0; i < length; i++) {
const binStr = Number(bytes[i]).toString(16)
result += '0'.repeat(2 - binStr.length) + binStr; // 不足二位前置補0
}
return result.toString();
}
複製代碼
關於 Buffer
的介紹網上有不少文章,但我以爲都不如官網寫的清晰,因此建議你們直接看文檔。
後續會繼續補充在工做中遇到與 Buffer
相關的使用場景,畢竟工具類函數只有在具體場景下分析才更有價值。