この記事では、nodejs のバッファに関する関連知識を提供します。Node.js では、バッファ クラスは、Node カーネルとともにリリースされるコア ライブラリです。バッファ ライブラリは、Node.js に導入されます。生データを保存する方法について、皆さんのお役に立てれば幸いです。
#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'));
// 输出: abcdefghijklmnopqrstuvwxyzconsole.log( buf.toString('ascii',0,5));
// 输出: abcdeconsole.log( buf.toString('utf8',0,5));
// 输出: abcdeconsole.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: [ 119, 119, 119, 46, 119, 51, 99, 115, 99, 104, 111, 111, 108, 46, 99, 110 ] }
バッファ マージ
構文ノード バッファー マージの構文は次のとおりです:
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());
上記のコードを実行すると、出力結果は次のようになります: buffer2 content: ABC
ノード バッファ クリッピングの構文は次のとおりです。次のように表示されます:
buf.slice([start[, end]])
パラメータは次のように説明されます: 返回值 返回一个新的缓冲区,它和旧缓冲区指向同一块内存,但是从索引 start 到 end 的位置剪切。 实例 执行以上代码,输出结果为: 语法 Node 缓冲区长度计算语法如下所示: 返回值 返回 Buffer 对象所占据的内存长度。 实例 执行以上代码,输出结果为: 更多node相关知识,请访问:nodejs 教程!!
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 サイトの他の関連記事を参照してください。