1. 程式人生 > 程式設計 >Node.js 緩衝區(Buffer)模組的方法及例項分析

Node.js 緩衝區(Buffer)模組的方法及例項分析

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

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

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

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

讓我們一起深入緩衝區(Buffer)的各種使用方法,瞭解更多有關它們的資訊以及一http://www.cppcns.com起學習如何在 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() 方法來實現這http://www.cppcns.com一點,給定方法根據搜尋返回一個布林值,即 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,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.js 緩衝區(Buffer)模組的方法及例項分析的文章就介紹到這了,更多相關Node.js 緩衝區(Buffer)模組的重要方法內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!