ホームページ > 記事 > ウェブフロントエンド > Node.js のバッファーを詳しく見る
この記事では、Node.jsのBuffer(バッファ)について深く理解し、Bufferクラスの作成方法やバッファへの書き込み方法などを紹介します。皆さんのお役に立てれば幸いです。
#JavaScript 言語自体には文字列データ型のみがあり、バイナリ データ型はありません。
ただし、TCP やファイル ストリームなどのストリームを処理する場合は、バイナリ データを使用する必要があります。そのため、Node.js では、バイナリ データを格納するための専用のバッファ領域を作成するために使用される Buffer クラスが定義されています。
Node.js では、Buffer クラスは Node カーネルとともにリリースされるコア ライブラリです。バッファ ライブラリは、生データを Node.js に保存する方法を提供し、Node.js でバイナリ データを処理できるようにします。Node.js で I/O 操作中に移動されたデータを処理する必要があるときはいつでも、バッファ ライブラリを使用できます。
元のデータは Buffer クラスのインスタンスに保存されます。
バッファは整数配列に似ていますが、V8 ヒープ メモリの外側にある元のメモリの一部に対応します。
Node Buffer クラスはさまざまな方法で作成できます。
方法 1
長さ 10 バイトのバッファ インスタンスを作成します:
var buf = new Buffer(10);
方法 2
指定された配列からバッファ インスタンスを作成します:
var buf = new Buffer([10, 20, 30, 40, 50]);
メソッド 3
文字列からバッファ インスタンスを作成します:
var buf = new Buffer("bianchengsanmei", "utf-8");
utf-8はデフォルトのエンコーディングであり、「ascii」、「utf8」、「utf16le」、「ucs2」、「base64」、「hex」のエンコーディングもサポートしています。
構文
ノード バッファを書き込むための構文は次のとおりです。
buf.write(string[, offset[, length]][, encoding])
パラメータ
パラメータは次のように説明されます:
#戻り値
実際に書き込まれたサイズを返します。バッファスペースが不十分な場合は、文字列の一部のみが書き込まれます。
例
buf = new Buffer(256); len = buf.write("bi"); len = buf.write("bianchengsanmei"); console.log("写入字节数 : "+ len);上記のコードを実行すると、出力結果は次のようになります:
$node main.js 写入字节数 : 15バッファからデータを読み取ります
構文
ノード バッファ データを読み取るための構文は次のとおりです:buf.toString([encoding[,start[,end]]])
パラメータ
パラメータは次のように説明されます:バッファ データをデコードし、指定されたエンコーディングを使用して文字列を返します。
例buf = new Buffer(26);
for (var i = 0 ; i < 26 ; i++) {
buf[i] = i + 97;
}
console.log( buf.toString('ascii')); // 输出: abcdefghijklmnopqrstuvwxyz
console.log( buf.toString('ascii',0,5)); // 输出: abcde
console.log( buf.toString('utf8',0,5)); // 输出: abcde
console.log( buf.toString(undefined,0,5)); // 使用 'utf8' 编码, 并输出: abcde
上記のコードを実行すると、出力結果は次のようになります:
$ node main.js abcdefghijklmnopqrstuvwxyz abcde abcde abcde
バッファを JSON オブジェクトに変換
構文ノード バッファーを JSON オブジェクトに変換するための関数の構文形式は次のとおりです。
buf.toJSON()戻り値
JSON オブジェクトを返します。 。
例var buf = new Buffer('bianchengsanmei');
var json = buf.toJSON(buf);
console.log(json);
上記のコードを実行すると、出力結果は次のようになります:
{ type: 'Buffer', data: [ 98, 105, 97, 110, 99, 104, 101, 110, 103, 115, 97, 110, 109, 101, 105 ] }
バッファ マージ
構文ノード バッファー マージの構文は次のとおりです:
Buffer.concat(list[, totalLength])パラメーター
パラメーターは次のように説明されます:
list - マージに使用される Buffer オブジェクトの配列リスト。複数のメンバーを結合した新しい Buffer オブジェクトを返します。
例
var buffer1 = new Buffer('编程三昧 '); var buffer2 = new Buffer('bi'); var buffer2 = new Buffer('bianchengsanmei'); var buffer3 = Buffer.concat([buffer1,buffer2]); console.log("buffer3 内容: " + buffer3.toString());上記のコードを実行すると、出力結果は次のようになります:
buffer3 内容: 编程三昧 bianchengsanmeiバッファ比較
ノード バッファ比較の関数構文は次のとおりです。このメソッドは Node.js v0.12.2 バージョンで導入されました:
buf.compare(otherBuffer);
Parameters
パラメータ 説明は次のとおりです。
otherBufferbuf
がotherBuffer## の前、後、または同じであることを示す数値を返します。 #。 例
var buffer1 = new Buffer('ABC'); var buffer2 = new Buffer('ABCD'); 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之前
コピー バッファ
ノード バッファ コピーの構文は次のとおりです: buf.copy(target[, targetStart[, sourceStart[, sourceEnd]]])
パラメータは次のように説明されます:
targetBuffer - コピーされる Buffer オブジェクト。 targetStart - 数値、オプション、デフォルト: 0戻り値はありません。
例var buffer1 = new Buffer('ABC'); // 拷贝一个缓冲区 var buffer2 = new Buffer(3); buffer1.copy(buffer2); console.log("buffer2 content: " + buffer2.toString());
上記のコードを実行すると、出力結果は次のようになります: Node 缓冲区裁剪语法如下所示: 参数 参数描述如下: 返回值 返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。 实例 执行以上代码,输出结果为: 语法 Node 缓冲区长度计算语法如下所示: 返回值 返回 Buffer 对象所占据的内存长度。 实例 执行以上代码,输出结果为: ~ ~本文完,感谢阅读! 更多node相关知识,请访问:nodejs 教程!buffer2 content: ABC
缓冲区裁剪
buf.slice([start[, end]])
var buffer1 = new Buffer('youj');
// 剪切缓冲区
var buffer2 = buffer1.slice(0,2);
console.log("buffer2 content: " + buffer2.toString());
buffer2 content: yo
缓冲区长度
buf.length;
var buffer = new Buffer('bianchengsanmei');
// 缓冲区长度
console.log("buffer length: " + buffer.length);
buffer length: 15
以上がNode.js のバッファーを詳しく見るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。