国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > JS > 正文

nodejs二進制與Buffer的介紹與使用

2024-05-06 16:53:17
字體:
供稿:網(wǎng)友

Buffer 介紹

javascript 中對數(shù)據(jù)處理都是以字符串的形式,而對于二進制數(shù)據(jù)就不便于處理,所以 Buffer 便是用于讀取或操作二進制數(shù)據(jù)都對象。

一句話概括: Buffer 類是一個全局變量,用于直接處理二進制數(shù)據(jù),提供工具類方法。

官網(wǎng)上關于 Buffer 解釋的非常清楚,所以就不再拷貝官網(wǎng),這里列舉一些使用較為頻繁的場景。

對象轉(zhuǎn)換成Buffer

在操作文件或者IO的場景中,我們需要將對象轉(zhuǎn)換成二進制數(shù)據(jù)流。

引用官方文檔

  • Buffer.from(array) 返回一個新的 Buffer,其中包含提供的八位字節(jié)數(shù)組的副本。
  • Buffer.from(arrayBuffer[, byteOffset [, length]]) 返回一個新的 Buffer,它與給定的 ArrayBuffer 共享相同的已分配內(nèi)存。
  • Buffer.from(buffer) 返回一個新的 Buffer,其中包含給定 Buffer 的內(nèi)容的副本。
  • Buffer.from(string[, encoding]) 返回一個新的 Buffer,其中包含提供的字符串的副本。
  • Buffer.alloc(size[, fill[, encoding]]) 返回一個指定大小的新建的的已初始化的 Buffer。 此方法比 Buffer.allocUnsafe(size) 慢,但能確保新創(chuàng)建的 Buffer 實例永遠不會包含可能敏感的舊數(shù)據(jù)。
  • Buffer.allocUnsafe(size) 和 Buffer.allocUnsafeSlow(size) 分別返回一個指定大小的新建的未初始化的 Buffer。 由于 Buffer 是未初始化的,因此分配的內(nèi)存片段可能包含敏感的舊數(shù)據(jù)。

栗子如下

const obj = { name:'test'}const buffer = Buffer.from(JSON.stringify(obj),'utf8') // 默認編碼是 utf8 

Buffer 對象轉(zhuǎn)換成其它機制的字符串

我們可以看到 Buffer 對象是一個 Uint8Array 的實例,所以我們可以使用迭代器獲取 Buffer 中數(shù)組的值。

nodejs,二進制,Buffer

1、Buffer 對象轉(zhuǎn)二進制字符串,便利獲取到數(shù)組中的值,通過 Number.toString(radix) 方法,將整形轉(zhuǎn)換成二進制字符串,最后將各個數(shù)值的二進制字符串拼接起來即可。但為了后續(xù)對二進制操作方便,所以我們約定好二進制的長度,因為 Buffer 數(shù)組是在 0 到 255 之間的整數(shù)數(shù)組,255 的二進制是 8 位,所以我們在轉(zhuǎn)換過程中把不足八位的前置補零,當然這還是得看具體的場景.

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();}

2、Buffer轉(zhuǎn)成 16 進制也是類似,如下

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 的介紹網(wǎng)上有很多文章,但我覺得都不如官網(wǎng)寫的清晰,所以建議大家直接看文檔。

后續(xù)會繼續(xù)補充在工作中遇到與 Buffer 相關的使用場景,畢竟工具類函數(shù)只有在具體場景下分析才更有價值。

總結

以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網(wǎng)的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 乐陵市| 乌拉特前旗| 乌苏市| 德阳市| 房产| 米林县| 呼玛县| 施秉县| 北京市| 彭泽县| 蒙城县| 龙山县| 辉县市| 西华县| 宁化县| 天长市| 柏乡县| 岳普湖县| 信丰县| 沧州市| 卢氏县| 永宁县| 汪清县| 内黄县| 盐源县| 溆浦县| 和平县| 正安县| 磐安县| 溧水县| 周口市| 眉山市| 宁乡县| 沂水县| 依安县| 广安市| 全州县| 通江县| 财经| 洛隆县| 梨树县|