聊聊一些Node.js 緩衝區(Buffer)模組的重要方法
這篇文章要跟大家分享一個Node.js 緩衝區的完整指南,聊聊一些Node 緩衝區(Buffer)模組的重要方法,希望對大家有幫助!
二進位流是大量的二進位資料的集合。由於通常情況下二進制流的大小挺大的,因此二進制流一般不會一起運送,而會在運輸前切分成小塊然後逐一發送。
當資料處理單元暫時不再接收其他資料流時,剩餘的資料將會保留在快取中,直到資料處理單元準備好接收更多資料為止。
Node.js 伺服器一般需要在檔案系統中進行讀寫,而檔案在儲存層面而言其實都是二進位流。除此之外,Node.js 還能與 TCP 流一起使用,讓 TCP 流在不可靠的互聯網上提供可靠的端對端位元組流保障通訊。
傳送給接收者的資料流會被緩衝,直到接收者準備接收更多要處理的資料為止。這就是 Node.js 處理臨時資料部分的工作內容 —— 在 V8 引擎外部管理和儲存二進位資料。
讓我們一起深入緩衝區(Buffer
)的各種使用方法,了解更多有關它們的資訊以及一起學習如何在 Node.js 程式中使用它們。
Node.js Buffer 的方法
Node.js 緩衝模組的最大優勢,其實就是它是內建在Node.js 中的,因此我們可以在任何我們想要使用它的地方使用它。
讓我們一起瀏覽一些重要的 Node.js 緩衝模組的方法吧。
Buffer.alloc()
此方法將建立一個新的緩衝區,但是分配的大小不是固定的。當我們呼叫此方法時,可以自行分配大小(以位元組為單位)。
const buf = Buffer.alloc(6) // 这会创建一个 6 字节的缓冲区 console.log(buf) // <Buffer 00 00 00 00 00 00>
Buffer.byteLength()
#如果我們想要取得緩衝區的長度,我們只需呼叫Buffer.byteLength ()
就行了。
var buf = Buffer.alloc(10) var buffLen = Buffer.byteLength(buf) // 检查缓冲区长度 console.log(buffLen) // 10
Buffer.compare()
#透過使用Buffer.compare()
我們可以比較兩個緩衝區,此方法的傳回值是-1
,0
,1
中的一個。
譯者註:buf.compare(otherBuffer);
這句呼喚會回傳一個數字-1
,0
, 1
,分別對應buf
在otherBuffer
之前,之後或相同。
var buf1 = Buffer.from('Harsh') var buf2 = Buffer.from('Harsg') var a = Buffer.compare(buf1, buf2) console.log(a) // 这会打印 0 var buf1 = Buffer.from('a') var buf2 = Buffer.from('b') var a = Buffer.compare(buf1, buf2) console.log(a) // 这会打印 -1 var buf1 = Buffer.from('b') var buf2 = Buffer.from('a') var a = Buffer.compare(buf1, buf2) console.log(a) // 这会打印 1
Buffer.concat()
#顧名思義,我們可以使用此函數連接兩個緩衝區。當然,就像字串一樣,我們也可以連接兩個以上的緩衝區。
var buffer1 = Buffer.from('x') var buffer2 = Buffer.from('y') var buffer3 = Buffer.from('z') var arr = [buffer1, buffer2, buffer3] console.log(arr) /* buffer, !concat [ <Buffer 78>, <Buffer 79>, <Buffer 7a> ] */ // 通过 Buffer.concat 方法连接两个缓冲区 var buf = Buffer.concat(arr) console.log(buf) // <Buffer 78 79 7a> concat successful
Buffer.entries()
#Buffer.entries()
會用這一緩衝區的內容創建並且傳回一個[index, byte] 形式的迭代器。
var buf = Buffer.from('xyz') for (a of buf.entries()) { console.log(a) /* 这个会在控制台输出一个有缓冲区位置与内容的字节的数组 [ 0, 120 ][ 1, 121 ][ 2, 122 ] */ }
Buffer.fill()
#我們可以使用Buffer.fill()
這個函數插入資料或填滿到緩衝區中。更多資訊請參見下文。
const b = Buffer.alloc(10).fill('a') console.log(b.toString()) // aaaaaaaaaa
Buffer.includes()
#像字串一樣,它將確認緩衝區是否具有該值。我們可以使用 Buffer.includes()
方法來實現這一點,給定方法根據搜尋傳回一個布林值,即 true
或 false
。
const buf = Buffer.from('this is a buffer') console.log(buf.includes('this')) // true console.log(buf.includes(Buffer.from('a buffer example'))) // false
Buffer.isEncoding()
#我們可能知道二進位檔案必須編碼,那麼如果我們要檢查資料型別是否支援字元編碼怎麼辦呢?我們可以使用 Buffer.isEncoding()
方法來確認。如果支持,它將返回 true
。
console.log(Buffer.isEncoding('hex')) // true console.log(Buffer.isEncoding('utf-8')) // true console.log(Buffer.isEncoding('utf/8')) // false console.log(Buffer.isEncoding('hey')) // false
Buffer.slice()
#buf.slice()
將用於使用緩衝區的選定元素建立一個新緩衝區- 對緩衝區進行切割時,將建立一個新緩衝區,其中包含要在新緩衝區切片中找到的項目的清單。
var a = Buffer.from('uvwxyz'); var b = a.slice(2, 5); console.log(b.toString()); // wxy
Buffer.swapX()
#Buffer.swapX()
用於交換緩衝區的位元組順序。使用 Buffer.swapX()
(此處 X
可以為 16, 32, 64)來交換 16 位元,32 位元和 64 位元緩衝區物件的位元組順序。
const buf1 = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]) console.log(buf1) // <Buffer 01 02 03 04 05 06 07 08> // 交换 16 位字节顺序 buf1.swap16() console.log(buf1) // <Buffer 02 01 04 03 06 05 08 07> // 交换 32 位字节顺序 buf1.swap32() console.log(buf1) // <Buffer 03 04 01 02 07 08 05 06> // 交换 64 位字节顺序 buf1.swap64() console.log(buf1) // <Buffer 06 05 08 07 02 01 04 03>
Buffer.json()
它可以幫助我們從緩衝區建立JSON 對象,而該方法將傳回JSON 緩衝區對象,
const buf = Buffer.from([0x1, 0x2, 0x3, 0x4, 0x5, 0x6, 0x7, 0x8]); console.log(buf.toJSON()); // {"type":"Buffer", data:[1, 2, 3, 4, 5, 6, 7, 8]}
结论
如果我们需要进一步了解并使用 Node.js 的缓冲区,我们需要对缓冲区以及 Node.js 缓冲区的工作原理有更扎实的基础知识。我们还应该了解为什么我们需要使用 Node.js 缓冲区和各种 Node.js 缓冲区方法的使用。
更多node相关知识,请访问:nodejs 教程!!
以上是聊聊一些Node.js 緩衝區(Buffer)模組的重要方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

作用是:給工程師們回饋使用資訊與記錄方便分析問題(開發時使用的);由於使用者本身不是經常產生上傳日誌,所以對使用者無用。日誌記錄緩衝區是小型的、用於短期儲存將寫入到磁碟上的重做日誌的變更向量的臨時區域。日誌緩衝區對磁碟的一次寫入是來自多個交易的一批變更向量。即使如此,日誌緩衝區中的變更向量也是接近即時寫入磁碟,當會話發出COMMIT語句時,會即時執行日誌緩衝區寫入操作。

基於無阻塞、事件驅動建立的Node服務,具有記憶體消耗低的優點,非常適合處理海量的網路請求。在海量請求的前提下,就需要考慮「記憶體控制」的相關問題了。 1. V8的垃圾回收機制與記憶體限制 Js由垃圾回收機

選擇一個Node的Docker映像看起來像是小事,但是映像的大小和潛在漏洞可能會對你的CI/CD流程和安全造成重大的影響。那我們要如何選擇一個最好Node.js Docker映像呢?

Node 19已正式發布,以下這篇文章就來帶大家詳解了解Node.js 19的 6 大特性,希望對大家有幫助!

文件模組是對底層文件操作的封裝,例如文件讀寫/打開關閉/刪除添加等等文件模組最大的特點就是所有的方法都提供的**同步**和**異步**兩個版本,具有sync 字尾的方法都是同步方法,沒有的都是異

事件循環是 Node.js 的基本組成部分,透過確保主執行緒不被阻塞來實現非同步編程,了解事件循環對建立高效應用程式至關重要。以下這篇文章就來帶大家深入了解Node中的事件循環 ,希望對大家有幫助!

如何用pkg打包nodejs可執行檔?以下這篇文章跟大家介紹一下使用pkg將Node專案打包為執行檔的方法,希望對大家有幫助!
