Node.js の実践的なコード スニペットの正しいスプライシング Buffer_node.js

WBOY
リリース: 2016-05-16 15:10:24
オリジナル
1273 人が閲覧しました

Node.js フレームワークを初めて使用する開発者は、Buffer モジュールの方が学習しやすく、重要性が低いと考えるかもしれません。実際、Buffer モジュールはファイル I/O やネットワーク I/O で広く使用されており、そのバイナリ処理パフォーマンスは通常の文字列よりもはるかに高く、その重要性は非常に高いです。以下では、ルーチンを使用して、buf.concat() メソッドを使用したスプライシングのプロセスを読者に示します。

この例の ch04.buffer-concat.js のメインコードは次のとおりです:

/** 
 * ch04.buffer-concat.js 
 */ 
console.info("------  Buffer concat vs String concat ------"); 
console.info(); 
/** 
 * define variable 
 * @type {Buffer} 
 */ 
var buf = new Buffer("this is Buffer concat test!"); 
var str = "this is String concat test!"; 
/** 
 * start record time 
 */ 
console.time("buffer concat test!"); 
var list = []; 
var len = 100000 * buf.length; 
for(var i=0; i<100000; i++){ 
  list.push(buf); 
  len += buf.length; 
} 
/** 
 * Buffer 对象拼接 
 */ 
var s1 = Buffer.concat(list, len).toString(); 
console.timeEnd("buffer concat test!"); 
console.info(); 
console.time("string concat test!"); 
var list = []; 
for(var i=100000; i>=0; i--) { 
  list.push(str); 
} 
/** 
 * String 对象拼接 
 * @type {string} 
 */ 
var s2 = list.join(""); 
console.timeEnd("string concat test!"); 
/** 
 * end record time 
 */ 
console.info(); 
console.info("------  Buffer concat vs String concat ------");
ログイン後にコピー

【コード解析】

コードの 10 行目は Buffer オブジェクトを定義し、変数名は buf で、文字列データを初期化します (「これは Buffer concat test!」)。コードの 11 行目は文字列変数 str を定義し、それを文字列に初期化します。 data ("thisis String concat test!"); コードの 15 行目の先頭からコードの 26 行目の終わりまで、一定期間の記録が console.time() と console.timeEnd( ) メソッド; 16 番目から 21 番目 コード行は、配列変数 list[] を定義し、 buf 変数を使用して配列変数を初期化します。コード行 25 は、 list[] 配列内のコードを Buffer オブジェクトに再結合します。 Buffer.concat(list,len) メソッド。Buffer.concat(list,len) メソッドの構文説明は次のとおりです。

構文:

Buffer.concat(list,[totalLength])
パラメータの説明:

list{Array}: 配列タイプ、バッファ配列、接続されていた
totalLength: {Number} 型、最初のパラメータの合計サイズ バッファ配列オブジェクト

このメソッドは、受信バッファ配列内のすべてのバッファ オブジェクトのスプライシングを保存するバッファ オブジェクトを返します。受信配列に内容がない場合、または totalLength パラメータが 0 の場合は、長さ 0 のバッファが返されます。配列内に項目が 1 つだけある場合は、最初の項目が返されます。配列内に複数の項目がある場合は、totalLength パラメーターが指定されていない場合は、読み取りは行われますが、新しい Buffer オブジェクトのインスタンスが作成されます。バッファ配列のフェッチから計算されますが、長さを計算するために追加のループが追加されるため、明示的に totalLength パラメーターを指定すると、Buffer.concat() メソッドの実行が高速になります。

図に示した結果からわかるように、Buffer.concat(list,len) メソッドを使用したスプライシングにかかる​​時間は 48ms です。

バッファオブジェクトのスプライシング関数

注:

Buffer.concat(list, [totalLength]) メソッドの 2 番目のパラメーター totalLength は特殊であり、ここでの totalLength は配列の長さではなく、バッファー インスタンスの合計サイズです。配列。 上記は 2 番目の実践的な Node.js コード スニペットです。皆さんの学習に役立つことを願っています。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!