目錄
建立 Buffer 類別
寫入緩衝區
從緩衝區讀取資料
語法
缓冲区裁剪
缓冲区长度
首頁 web前端 js教程 深入了解Node.js中的 Buffer(緩衝區)

深入了解Node.js中的 Buffer(緩衝區)

Jan 27, 2022 pm 06:27 PM
buffer node.js 緩衝區

這篇文章帶大家深入了解下Node.js中的Buffer(緩衝區),介紹一下創建Buffer 類別的多種方式、寫入緩衝區的方法等,希望對大家有所幫助!

深入了解Node.js中的 Buffer(緩衝區)

JavaScript 語言本身只有字串資料型,沒有二進位資料型別。

但在處理像 TCP 流或檔案流時,必須使用到二進位資料。因此在 Node.js 中,定義了一個 Buffer 類,該類別用來建立一個專門存放二進位資料的快取區。

在 Node.js 中,Buffer 類別是隨 Node 核心一起發佈的核心函式庫。 Buffer 函式庫為Node.js 帶來了一種儲存原始資料的方法,可以讓Node.js 處理二進位數據,每當需要在Node.js 中處理I/O 操作中移動的資料時,就有可能使用Buffer 函式庫。

原始資料儲存在 Buffer 類別的實例中。

一個 Buffer 類似於一個整數數組,但它對應於 V8 堆記憶體之外的一塊原始記憶體。

建立 Buffer 類別

Node Buffer 類別可以透過多種方式來建立。

方法1

建立長度為10 位元組的Buffer 實例:

var buf = new Buffer(10);
登入後複製

方法2

透過給定的陣列建立Buffer 實例:

var buf = new Buffer([10, 20, 30, 40, 50]);
登入後複製

方法3

透過一個字串來建立Buffer 實例:

var buf = new Buffer("bianchengsanmei", "utf-8");
登入後複製

utf-8是預設的編碼方式,此外它同樣支援以下編碼:"ascii", "utf8", "utf16le", "ucs2", "base64" 和"hex"。

寫入緩衝區

語法

寫入Node 緩衝區的語法如下所示:

buf.write(string[, offset[, length]][, encoding])
登入後複製

參數

參數描述如下:

  • string - 寫入緩衝區的字串。
  • offset - 緩衝區開始寫入的索引值,預設為 0 。
  • length - 寫入的位元組數,預設為 buffer.length
  • encoding - 使用的編碼。預設為 'utf8' 。

傳回值

傳回實際寫入的大小。如果 buffer 空間不足, 則只會寫入部分字串。
實例

buf = new Buffer(256);
len = buf.write("bi");
len = buf.write("bianchengsanmei"); 
console.log("写入字节数 : "+  len);
登入後複製

執行上述程式碼,輸出結果為:

$node main.js
写入字节数 : 15
登入後複製

從緩衝區讀取資料

##語法

讀取Node 緩衝區資料的語法如下所示:

buf.toString([encoding[,start[,end]]])
登入後複製

參數

參數描述如下:

  • #encoding - 使用的編碼。預設為 'utf8' 。

  • start - 指定開始讀取的索引位置,預設為 0。

  • end - 結束位置,預設為緩衝區的結尾。

傳回值

解碼緩衝區資料並使用指定的編碼傳回字串。

實例

buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
  buf[i] = i + 97;
}
 
console.log( buf.toString(&#39;ascii&#39;));       // 输出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString(&#39;ascii&#39;,0,5));   // 输出: abcde
console.log( buf.toString(&#39;utf8&#39;,0,5));    // 输出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 &#39;utf8&#39; 编码, 并输出: abcde
登入後複製

執行上述程式碼,輸出結果為:

$ node main.js
abcdefghijklmnopqrstuvwxyz
abcde
abcde
abcde
登入後複製

將Buffer 轉換為JSON 物件

#語法

將Node Buffer 轉換為JSON 物件的函數語法格式如下:

buf.toJSON()
登入後複製

傳回值

傳回JSON 物件。

實例

var buf = new Buffer(&#39;bianchengsanmei&#39;);
var json = buf.toJSON(buf);
 
console.log(json);
登入後複製

執行上述程式碼,輸出結果為:

{
  type: &#39;Buffer&#39;,
  data: [
     98, 105, 97, 110, 99, 104, 101, 110, 103, 115, 97, 110, 109, 101, 105
  ]
}
登入後複製

緩衝區合併

語法

Node 緩衝區合併的語法如下所示:

Buffer.concat(list[, totalLength])
登入後複製

參數##參數描述如下:

# list - 用於合併的Buffer 物件陣列清單。
  • totalLength - 指定合併後 Buffer 物件的總長度。
傳回值

傳回一個多個成員合併的新 Buffer 物件。

實例

var buffer1 = new Buffer(&#39;编程三昧 &#39;);
var buffer2 = new Buffer(&#39;bi&#39;);
var buffer2 = new Buffer(&#39;bianchengsanmei&#39;);
var buffer3 = Buffer.concat([buffer1,buffer2]);
console.log("buffer3 内容: " + buffer3.toString());
登入後複製
執行上述程式碼,輸出結果為:

buffer3 内容: 编程三昧 bianchengsanmei
登入後複製

緩衝區比較

語法

Node Buffer 比較的函數語法如下所示, 該方法在Node.js v0.12.2 版本引入:

buf.compare(otherBuffer);
登入後複製

參數

##參數描述如下:

otherBuffer
    - 與
  • buf 物件比較的另外一個Buffer 物件。
  • 傳回值

傳回數字,表示 buf

otherBuffer 之前,之後或相同。 實例

var buffer1 = new Buffer(&#39;ABC&#39;);
var buffer2 = new Buffer(&#39;ABCD&#39;);
var result = buffer1.compare(buffer2);
 
if(result < 0) {
   console.log(buffer1 + " 在 " + buffer2 + "之前");
}else if(result == 0){
   console.log(buffer1 + " 与 " + buffer2 + "相同");
}else {
   console.log(buffer1 + " 在 " + buffer2 + "之后");
}
登入後複製
執行上述程式碼,輸出結果為:
ABC在ABCD之前
登入後複製

拷貝緩衝區

語法

Node 緩衝區拷貝語法如下所示:

buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
登入後複製

參數

參數描述如下:

targetBuffer - 要拷貝的Buffer 物件。

    targetStart - 數字, 可選, 預設: 0
  • sourceStart - 數字, 可選, 預設: 0
  • sourceEnd - 數字, 可選, 預設: buffer.length
  • 傳回值

沒有傳回值。

實例

var buffer1 = new Buffer(&#39;ABC&#39;);
// 拷贝一个缓冲区
var buffer2 = new Buffer(3);
buffer1.copy(buffer2);
console.log("buffer2 content: " + buffer2.toString());
登入後複製
執行上述程式碼,輸出結果為:
buffer2 content: ABC
登入後複製

缓冲区裁剪

Node 缓冲区裁剪语法如下所示:

buf.slice([start[, end]])
登入後複製

参数

参数描述如下:

  • start - 数字, 可选, 默认: 0
  • end - 数字, 可选, 默认: buffer.length

返回值

返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。

实例

var buffer1 = new Buffer(&#39;youj&#39;);
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());
登入後複製

执行以上代码,输出结果为:

buffer2 content: yo
登入後複製

缓冲区长度

语法 Node 缓冲区长度计算语法如下所示:

buf.length;
登入後複製

返回值

返回 Buffer 对象所占据的内存长度。

实例

var buffer = new Buffer(&#39;bianchengsanmei&#39;);
//  缓冲区长度
console.log("buffer length: " + buffer.length);
登入後複製

执行以上代码,输出结果为:

buffer length: 15
登入後複製

~

~本文完,感谢阅读!

更多node相关知识,请访问:nodejs 教程

以上是深入了解Node.js中的 Buffer(緩衝區)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

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

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

日誌記錄器緩衝區大小日誌有什麼用 日誌記錄器緩衝區大小日誌有什麼用 Mar 13, 2023 pm 04:27 PM

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

圖文詳解Node V8引擎的記憶體和GC 圖文詳解Node V8引擎的記憶體和GC Mar 29, 2023 pm 06:02 PM

這篇文章帶大家深入了解NodeJS V8引擎的記憶體和垃圾回收器(GC),希望對大家有幫助!

一文聊聊Node中的記憶體控制 一文聊聊Node中的記憶體控制 Apr 26, 2023 pm 05:37 PM

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

聊聊如何選擇一個最好的Node.js Docker映像? 聊聊如何選擇一個最好的Node.js Docker映像? Dec 13, 2022 pm 08:00 PM

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

Node.js 19正式發布,聊聊它的 6 大功能! Node.js 19正式發布,聊聊它的 6 大功能! Nov 16, 2022 pm 08:34 PM

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

深入聊聊Node中的File模組 深入聊聊Node中的File模組 Apr 24, 2023 pm 05:49 PM

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

一起聊聊Node中的事件循環 一起聊聊Node中的事件循環 Apr 11, 2023 pm 07:08 PM

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

聊聊Node.js中的 GC (垃圾回收)機制 聊聊Node.js中的 GC (垃圾回收)機制 Nov 29, 2022 pm 08:44 PM

Node.js 是如何做 GC (垃圾回收)的?下面這篇文章就來帶大家了解一下。

See all articles