欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Node.js 緩沖區(qū)(Buffer)模塊的方法及實例分析

 更新時間:2022年01月06日 08:38:05   作者:青燈夜游  
在本篇文章里小編給大家整理了一篇關于Node.js 緩沖區(qū)(Buffer)模塊的方法及實例分析,對此有興趣的朋友們可以跟著學習下。

二進制流是大量的二進制數(shù)據(jù)的集合。由于通常情況下二進制流的大小挺大的,因此二進制流一般不會一起運送,而會在運輸前切分成小塊然后逐一發(fā)送。

當數(shù)據(jù)處理單元暫時不再接收其他數(shù)據(jù)流時,剩余的數(shù)據(jù)將會被保留在緩存中,直到數(shù)據(jù)處理單元準備好接收更多數(shù)據(jù)為止。

Node.js 服務器一般需要在文件系統(tǒng)中進行讀寫,而文件在存儲層面而言其實都是二進制流。除此之外,Node.js 還能與 TCP 流一起使用,讓 TCP 流在不可靠的互聯(lián)網絡上提供可靠的端到端字節(jié)流保障通信。

發(fā)送給接收者的數(shù)據(jù)流會被緩沖,直到接收者準備接收更多要處理的數(shù)據(jù)為止。這就是 Node.js 處理臨時數(shù)據(jù)部分的工作內容 —— 在 V8 引擎外部管理和存儲二進制數(shù)據(jù)。

讓我們一起深入緩沖區(qū)(Buffer)的各種使用方法,了解更多有關它們的信息以及一起學習如何在 Node.js 程序中使用它們吧。

Node.js Buffer 的方法

Node.js 緩沖模塊的最大優(yōu)勢,其實就是它是內置于 Node.js 中的,因此我們可以在任何我們想要使用它的地方使用它。

讓我們一起瀏覽一些重要的 Node.js 緩沖模塊的方法吧。

Buffer.alloc()

此方法將創(chuàng)建一個新的緩沖區(qū),但是分配的大小不是固定的。當我們調用此方法時,可以自行分配大小(以字節(jié)為單位)。

const buf = Buffer.alloc(6)  // 這會創(chuàng)建一個 6 字節(jié)的緩沖區(qū)
console.log(buf) // <Buffer 00 00 00 00 00 00>

Buffer.byteLength()

如果我們想要獲取緩沖區(qū)的長度,我們只需調用 Buffer.byteLength() 就行了。

var buf = Buffer.alloc(10)
var buffLen = Buffer.byteLength(buf) // 檢查緩沖區(qū)長度
 
console.log(buffLen) // 10

Buffer.compare()

通過使用 Buffer.compare() 我們可以比較兩個緩沖區(qū),此方法的返回值是 -1,0,1 中的一個。

譯者注:buf.compare(otherBuffer); 這一句調用會返回一個數(shù)字 -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()

顧名思義,我們可以使用此函數(shù)連接兩個緩沖區(qū)。當然,就像字符串一樣,我們也可以連接兩個以上的緩沖區(qū)。

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 方法連接兩個緩沖區(qū)
var buf = Buffer.concat(arr)
 
console.log(buf)
// <Buffer 78 79 7a> concat successful

Buffer.entries()

Buffer.entries() 會用這一緩沖區(qū)的內容創(chuàng)建并返回一個 [index, byte] 形式的迭代器。

var buf = Buffer.from('xyz')
 
for (a of buf.entries()) {
    console.log(a)
    /* 這個會在控制臺輸出一個有緩沖區(qū)位置與內容的字節(jié)的數(shù)組 [ 0, 120 ][ 1, 121 ][ 2, 122 ] */
}

Buffer.fill()

我們可以使用 Buffer.fill() 這個函數(shù)將數(shù)據(jù)插入或填充到緩沖區(qū)中。更多信息請參見下文。

const b = Buffer.alloc(10).fill('a')
 
console.log(b.toString())
// aaaaaaaaaa

Buffer.includes()

像字符串一樣,它將確認緩沖區(qū)是否具有該值。我們可以使用 Buffer.includes() 方法來實現(xiàn)這一點,給定方法根據(jù)搜索返回一個布爾值,即 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()

我們可能知道二進制文件必須進行編碼,那么如果我們要檢查數(shù)據(jù)類型是否支持字符編碼該怎么辦呢?我們可以使用 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() 將用于使用緩沖區(qū)的選定元素創(chuàng)建一個新緩沖區(qū) —— 對緩沖區(qū)進行切割時,將創(chuàng)建一個新緩沖區(qū),其中包含要在新緩沖區(qū)切片中找到的項目的列表。

var a = Buffer.from('uvwxyz');
var b = a.slice(2, 5);
 
console.log(b.toString());
// wxy

Buffer.swapX()

Buffer.swapX() 用于交換緩沖區(qū)的字節(jié)順序。使用 Buffer.swapX() (此處 X 可以為 16, 32, 64)來交換 16 位,32 位和 64 位緩沖區(qū)對象的字節(jié)順序。

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 位字節(jié)順序
buf1.swap16()
console.log(buf1)
// <Buffer 02 01 04 03 06 05 08 07>
 
// 交換 32 位字節(jié)順序
buf1.swap32()
console.log(buf1)
// <Buffer 03 04 01 02 07 08 05 06>
 
// 交換 64 位字節(jié)順序
buf1.swap64()
console.log(buf1)
// <Buffer 06 05 08 07 02 01 04 03>

Buffer.json()

它可以幫助我們從緩沖區(qū)創(chuàng)建 JSON 對象,而該方法將返回 JSON 緩沖區(qū)對象,

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 的緩沖區(qū),我們需要對緩沖區(qū)以及 Node.js 緩沖區(qū)的工作原理有更扎實的基礎知識。我們還應該了解為什么我們需要使用 Node.js 緩沖區(qū)和各種 Node.js 緩沖區(qū)方法的使用。

到此這篇關于Node.js 緩沖區(qū)(Buffer)模塊的方法及實例分析的文章就介紹到這了,更多相關Node.js 緩沖區(qū)(Buffer)模塊的重要方法內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Node.js log4js日志管理詳解

    Node.js log4js日志管理詳解

    日志對任何的應用來說都是至關重要的,下面這篇文章主要給大家介紹了關于Node.js log4js日志管理的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學習學習吧
    2018-07-07
  • node版本太高導致項目跑不起來的解決辦法(windows)

    node版本太高導致項目跑不起來的解決辦法(windows)

    換了臺電腦后,安裝node,一切完美,發(fā)現(xiàn)其中有一個uniapp的小程序項目跑不起來,感覺是node版本太高導致的,所以只能重新安裝低版本的node,本文給大家介紹了node版本太高的解決辦法,需要的朋友可以參考下
    2023-10-10
  • 詳解axios在node.js中的post使用

    詳解axios在node.js中的post使用

    最近因為工作的原因在學習使用網絡請求庫,因為這個項目用的是Promise,所以就選擇了axios,下面這篇文章主要給大家介紹了關于axios在node.js中的post使用的相關資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起學習學習吧。
    2017-04-04
  • Node.js學習之地址解析模塊URL的使用詳解

    Node.js學習之地址解析模塊URL的使用詳解

    url模塊是nodejs里面的一個簡單的模塊,下面這篇文章主要給大家介紹了關于Node.js學習之地址解析模塊URL使用的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-09-09
  • nodejs開發(fā)環(huán)境配置與使用

    nodejs開發(fā)環(huán)境配置與使用

    經過幾個星期的nodejs學習,從開始的小白到現(xiàn)在漸漸得熟悉,走過來也才算明白,現(xiàn)在已經入門也掌握了相關的學習方法,今天開始記錄下自己學習的過程,以便日后查看。
    2014-11-11
  • nodejs實現(xiàn)一個word文檔解析器思路詳解

    nodejs實現(xiàn)一個word文檔解析器思路詳解

    這篇文章主要介紹了nodejs實現(xiàn)一個word文檔解析器的思路詳解,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2018-08-08
  • nodejs教程之異步I/O

    nodejs教程之異步I/O

    nodejs的核心之一就是非阻塞的異步IO,于是想知道它是怎么實現(xiàn)的,經過一份研究,找到些答案,在此跟大家分享下。
    2014-11-11
  • Node.js開源應用框架HapiJS介紹

    Node.js開源應用框架HapiJS介紹

    這篇文章主要介紹了Node.js開源應用框架HapiJS介紹,本文講解了HapiJS介紹、HapiJS安裝和項目配置和開發(fā)實例等內容,需要的朋友可以參考下
    2015-01-01
  • nodejs 圖片預覽和上傳的示例代碼

    nodejs 圖片預覽和上傳的示例代碼

    本篇文章主要介紹了nodejs 圖片預覽和上傳的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • 開箱即用的Node.js+Mysql模塊封裝實現(xiàn)詳解

    開箱即用的Node.js+Mysql模塊封裝實現(xiàn)詳解

    這篇文章主要為大家介紹了開箱即用的Node.js+Mysql模塊封裝實現(xiàn)詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01

最新評論