首頁  >  文章  >  web前端  >  聊聊一些Node.js 緩衝區(Buffer)模組的重要方法

聊聊一些Node.js 緩衝區(Buffer)模組的重要方法

青灯夜游
青灯夜游轉載
2022-01-05 19:03:241436瀏覽

這篇文章要跟大家分享一個Node.js 緩衝區的完整指南,聊聊一些Node 緩衝區(Buffer)模組的重要方法,希望對大家有幫助!

聊聊一些Node.js 緩衝區(Buffer)模組的重要方法

二進位流是大量的二進位資料的集合。由於通常情況下二進制流的大小挺大的,因此二進制流一般不會一起運送,而會在運輸前切分成小塊然後逐一發送。

當資料處理單元暫時不再接收其他資料流時,剩餘的資料將會保留在快取中,直到資料處理單元準備好接收更多資料為止。

Node.js 伺服器一般需要在檔案系統中進行讀寫,而檔案在儲存層面而言其實都是二進位流。除此之外,Node.js 還能與 TCP 流一起使用,讓 TCP 流在不可靠的互聯網上提供可靠的端對端位元組流保障通訊。

傳送給接收者的資料流會被緩衝,直到接收者準備接收更多要處理的資料為止。這就是 Node.js 處理臨時資料部分的工作內容 —— 在 V8 引擎外部管理和儲存二進位資料。

讓我們一起深入緩衝區(Buffer)的各種使用方法,了解更多有關它們的資訊以及一起學習如何在 Node.js 程式中使用它們。

聊聊一些Node.js 緩衝區(Buffer)模組的重要方法

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() 我們可以比較兩個緩衝區,此方法的傳回值是-101 中的一個。

譯者註:buf.compare(otherBuffer); 這句呼喚會回傳一個數字-10 1,分別對應bufotherBuffer 之前,之後或相同。

var buf1 = Buffer.from(&#39;Harsh&#39;)
var buf2 = Buffer.from(&#39;Harsg&#39;)
var a = Buffer.compare(buf1, buf2)
console.log(a) // 这会打印 0

var buf1 = Buffer.from(&#39;a&#39;)
var buf2 = Buffer.from(&#39;b&#39;)
var a = Buffer.compare(buf1, buf2)
console.log(a) // 这会打印 -1


var buf1 = Buffer.from(&#39;b&#39;)
var buf2 = Buffer.from(&#39;a&#39;)
var a = Buffer.compare(buf1, buf2)
console.log(a) // 这会打印 1

Buffer.concat()

#顧名思義,我們可以使用此函數連接兩個緩衝區。當然,就像字串一樣,我們也可以連接兩個以上的緩衝區。

var buffer1 = Buffer.from(&#39;x&#39;)
var buffer2 = Buffer.from(&#39;y&#39;)
var buffer3 = Buffer.from(&#39;z&#39;)
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(&#39;xyz&#39;)

for (a of buf.entries()) {
    console.log(a)
    /* 这个会在控制台输出一个有缓冲区位置与内容的字节的数组 [ 0, 120 ][ 1, 121 ][ 2, 122 ] */
}

Buffer.fill()

#我們可以使用Buffer.fill() 這個函數插入資料或填滿到緩衝區中。更多資訊請參見下文。

const b = Buffer.alloc(10).fill(&#39;a&#39;)

console.log(b.toString())
// aaaaaaaaaa

Buffer.includes()

#像字串一樣,它將確認緩衝區是否具有該值。我們可以使用 Buffer.includes() 方法來實現這一點,給定方法根據搜尋傳回一個布林值,即 truefalse

const buf = Buffer.from(&#39;this is a buffer&#39;)
console.log(buf.includes(&#39;this&#39;))
// true

console.log(buf.includes(Buffer.from(&#39;a buffer example&#39;)))
// false

Buffer.isEncoding()

#我們可能知道二進位檔案必須編碼,那麼如果我們要檢查資料型別是否支援字元編碼怎麼辦呢?我們可以使用 Buffer.isEncoding() 方法來確認。如果支持,它將返回 true

console.log(Buffer.isEncoding(&#39;hex&#39;))
// true

console.log(Buffer.isEncoding(&#39;utf-8&#39;))
// true

console.log(Buffer.isEncoding(&#39;utf/8&#39;))
// false

console.log(Buffer.isEncoding(&#39;hey&#39;))
// false

Buffer.slice()

#buf.slice() 將用於使用緩衝區的選定元素建立一個新緩衝區- 對緩衝區進行切割時,將建立一個新緩衝區,其中包含要在新緩衝區切片中找到的項目的清單。

var a = Buffer.from(&#39;uvwxyz&#39;);
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中文網其他相關文章!

陳述:
本文轉載於:juejin.cn。如有侵權,請聯絡admin@php.cn刪除