
- Node.js 教程
- Node.js - 首頁
- Node.js - 簡介
- Node.js - 環境設定
- Node.js - 第一個應用程式
- Node.js - REPL 終端
- Node.js - 命令列選項
- Node.js - 包管理器 (NPM)
- Node.js - 回撥概念
- Node.js - 上傳檔案
- Node.js - 傳送郵件
- Node.js - 事件
- Node.js - 事件迴圈
- Node.js - 事件發射器
- Node.js - 偵錯程式
- Node.js - 全域性物件
- Node.js - 控制檯
- Node.js - 程序
- Node.js - 應用程式擴充套件
- Node.js - 打包
- Node.js - Express 框架
- Node.js - RESTful API
- Node.js - 緩衝區
- Node.js - 流
- Node.js - 檔案系統
- Node.js MySQL
- Node.js - MySQL 入門
- Node.js - MySQL 建立資料庫
- Node.js - MySQL 建立表
- Node.js - MySQL 插入資料
- Node.js - MySQL 查詢資料
- Node.js - MySQL where 條件
- Node.js - MySQL 排序
- Node.js - MySQL 刪除資料
- Node.js - MySQL 更新資料
- Node.js - MySQL 連線查詢
- Node.js MongoDB
- Node.js - MongoDB 入門
- Node.js - MongoDB 建立資料庫
- Node.js - MongoDB 建立集合
- Node.js - MongoDB 插入資料
- Node.js - MongoDB 查詢資料
- Node.js - MongoDB 查詢
- Node.js - MongoDB 排序
- Node.js - MongoDB 刪除資料
- Node.js - MongoDB 更新資料
- Node.js - MongoDB 限制結果
- Node.js - MongoDB 連線查詢
- Node.js 模組
- Node.js - 模組
- Node.js - 內建模組
- Node.js - 實用程式模組
- Node.js - Web 模組
- Node.js 有用資源
- Node.js - 快速指南
- Node.js - 有用資源
- Node.js - 討論
Node.js - 緩衝區
Node.js 中的緩衝區類物件用於表示固定長度的位元組序列。它儲存原始資料,類似於整數陣列,但對應於 V8 堆之外的原始記憶體分配。Node.js 中的 Buffer 類是 JavaScript Uint8Array 類的子類。儘管 Buffer 類例項是一個全域性物件,但建議透過 import 或 require 語句顯式引用該類。
在早期版本的 Node.js 中,緩衝區物件是用 new 運算子宣告的:
var buf = new Buffer(10);
也可以從給定的陣列建立一個緩衝區物件:
var buf = new Buffer([10, 20, 30, 40, 50]);
或從給定的字串:
var buf = new Buffer("Simply Easy Learning", "utf-8");
但是,現在已棄用 new 關鍵字的使用。您需要使用以下靜態方法來建立 Buffer 物件:
// Creates a zero-filled Buffer of length 10. const buf1 = Buffer.alloc(10); // Creates an uninitialized buffer of length 10. const buf2 = Buffer.allocUnsafe(10); // Creates a Buffer containing array const buf3 = Buffer.from([1, 2, 3]); // creates a buffer from string const buf4 = Buffer.from('hello world', 'utf8');
靜態方法
alloc()
分配一個指定大小(以位元組為單位)的新緩衝區。
Buffer.alloc(size[, fill[, encoding]])
引數
size - 新緩衝區的所需長度。
fill - 用來預填充新緩衝區的 value。預設為 0。
encoding - 如果 fill 是字串,則為其編碼。預設為 'utf8'。
示例
const buf = Buffer.alloc(5); console.log(buf);
輸出
<Buffer 00 00 00 00 00>
allocUnsafe()
建立一個指定大小(以位元組為單位)的未初始化緩衝區。
Buffer.allocUnsafe(size)
示例
const buf = Buffer.allocUnsafe(10); console.log(buf); buf.fill('a'); console.log(buf);
輸出
<Buffer 38 67 ff aa 32 56 00 00 08 00> <Buffer 61 61 61 61 61 61 61 61 61 61>
from()
使用範圍在 0 – 255 之間的位元組陣列分配新的緩衝區。
示例
// Creates a new Buffer containing the UTF-8 bytes of the string 'buffer'. const buf1 = Buffer.from([0x62, 0x75, 0x66, 0x66, 0x65, 0x72]); console.log(buf1); // Creates a new Buffer from integer array. const buf2 = Buffer.from([10, 20, 30, 40, 50]); console.log(buf2);
輸出
<Buffer 62 75 66 66 65 72> <Buffer 0a 14 1e 28 32>
from()
建立一個包含字串的新緩衝區。
Buffer.from(string[, encoding])
引數
string <string> 要編碼的字串。
encoding <string> 字串的編碼。預設為 'utf8'。encoding 引數標識在將字串轉換為位元組時要使用的字元編碼。
示例
const buf1 = Buffer.from('Hello World'); console.log(buf1); console.log(buf1.toString());
輸出
<Buffer 48 65 6c 6c 6f 20 57 6f 72 6c 64> Hello World
compare()
比較緩衝區物件與其他緩衝區物件。
compare(target[, targetStart[, targetEnd[, sourceStart[, sourceEnd]]]])
引數
target - 用於比較的緩衝區。
targetStart - 在 target 中開始比較的偏移量。預設為 0。
targetEnd - 在 target 中結束比較的偏移量(不包含)。預設為 target.length。
sourceStart - 在源緩衝區中開始比較的偏移量。預設為 0。
sourceEnd - 在源緩衝區中結束比較的偏移量(不包含)。預設為 buf.length。
該函式返回一個數字,指示第一個緩衝區在排序順序中是位於第二個緩衝區物件之前、之後還是與之相同。
如果第二個與第一個相同,則返回 0
如果第二個緩衝區在排序時應該位於第一個緩衝區之前,則返回 1。
如果第二個緩衝區在排序時應該位於第一個緩衝區之後,則返回 -1。
示例
var buffer1 = Buffer.from('BALL'); var buffer2 = Buffer.from('BAT'); var result = buffer1.compare(buffer2); if(result < 0) { console.log(buffer1 +" comes before " + buffer2); } else if(result === 0) { console.log(buffer1 +" is same as " + buffer2); } else { console.log(buffer1 +" comes after " + buffer2); }
輸出
BALL comes before BAT
在上面的示例中,將兩個 Buffer 物件更改為:
var buffer1 = Buffer.from('CURE'); var buffer2 = Buffer.from('CORE');
輸出
CURE comes after CORE
copy()
將資料從此緩衝區的某個區域複製到目標緩衝區的某個區域,即使目標記憶體區域與源記憶體區域重疊。
copy(target[, targetStart[, sourceStart[, sourceEnd]]])
引數
target - 要複製到的緩衝區。
targetStart - 開始寫入的 target 中的偏移量。預設為 0。
sourceStart - 開始複製的 buf 中的偏移量。預設為 0。
sourceEnd - 停止複製的 buf 中的偏移量(不包含)。預設為 buf.length。
示例
var buffer1 = Buffer.from('Hello World'); var buffer2 = Buffer.allocUnsafe(buffer1.length); var result = buffer1.compare(buffer2); buffer1.copy(buffer2); console.log("buffer2 content: " + buffer2.toString());
輸出
buffer2 content: Hello World
entries()
返回緩衝區物件內容的 [index, byte] 對的迭代器。
示例
var buf = Buffer.from('Hello World'); for (const pair of buf.entries()) { console.log(pair); }
輸出
[ 0, 72 ] [ 1, 101 ] [ 2, 108 ] [ 3, 108 ] [ 4, 111 ] [ 5, 32 ] [ 6, 87 ] [ 7, 111 ] [ 8, 114 ] [ 9, 108 ] [ 10, 100 ]
slice()
返回一個由給定索引裁剪的新緩衝區
buf.slice([start][, end])
引數
start - 數字,可選,預設為 0
end - 數字,可選,預設為 buffer.length
返回值
返回一個新的緩衝區,由 start(預設為 0)和 end(預設為 buffer.length)索引進行偏移和裁剪。負索引從緩衝區的末尾開始。
示例
var buffer1 = Buffer.from('TutorialsPoint'); //slicing a buffer var buffer2 = buffer1.slice(0,9); console.log("buffer2 content: " + buffer2.toString());
輸出
buffer2 content: Tutorials
write()
根據指定的編碼將字串寫入緩衝區的偏移量。
write(string[, offset[, length]][, encoding])
引數
string - 要寫入 buf 的字串。
offset - 開始寫入字串之前要跳過的位元組數。預設為 0。
length - 要寫入的最大位元組數(寫入的位元組數不會超過 buf.length - offset)。預設為 buf.length - offset。
encoding - 字串的字元編碼。預設為 'utf8'。
該函式返回寫入的位元組數。
示例
const buf = Buffer.alloc(256); const len = buf.write("Simple Easy Learning"); console.log(`${len} bytes: ${buf.toString('utf8', 0, len)}`);
輸出
20 bytes: Simple Easy Learning
toJSON()
返回給定緩衝區物件的 JSON 表示形式。
示例
const buf = Buffer.from("Simple Easy Learning"); var json = buf.toJSON(); console.log(json);
輸出
{ type: 'Buffer', data: [ 83, 105, 109, 112, 108, 101, 32, 69, 97, 115, 121, 32, 76, 101, 97, 114, 110, 105, 110, 103 ] }
concat()
返回一個新的 Buffer,它是所有 Buffer 例項連線的結果。
concat(list[, totalLength])
引數
list - 要連線的 Buffer 或 Uint8Array 例項列表。
totalLength - 列表中 Buffer 例項連線後的總長度。
示例
var buffer1 = Buffer.from('TutorialsPoint '); var buffer2 = Buffer.from('Simply Easy Learning'); var buffer3 = Buffer.concat([buffer1,buffer2]); console.log("buffer3 content: " + buffer3.toString());
輸出
buffer3 content: TutorialsPoint Simply Easy Learning
方法參考
類方法
序號 | 方法和描述 |
---|---|
1 |
Buffer.isEncoding(encoding) 如果編碼是有效的編碼引數,則返回true,否則返回false。 |
2 |
Buffer.isBuffer(obj) 測試obj是否為Buffer。 |
3 |
Buffer.byteLength(string[, encoding]) 給出字串的實際位元組長度。encoding預設為'utf8'。它與String.prototype.length不同,因為String.prototype.length返回字串中字元的個數。 |
4 |
Buffer.concat(list[, totalLength]) 返回一個緩衝區,它是將列表中所有緩衝區連線在一起的結果。 |
5 |
Buffer.compare(buf1, buf2) 與buf1.compare(buf2)相同。對於排序緩衝區陣列很有用。 |