バッファーとストリーム Node.js — Web バックエンドの実践実験

バッファ_

JavaScript言語自体には文字列データ型のみがあり、バイナリデータ型はありません。

ただし、TCP やファイル ストリームなどのストリームを扱う場合は、バイナリ データを使用する必要があります。そのため、Node.js では、バイナリ データを格納するための専用のバッファ領域を作成するために使用される Buffer クラスが定義されています。

Node.js では、Buffer クラスは Node コアに同梱されるコア ライブラリです。バッファ ライブラリは、生データを Node.js に保存する方法を提供し、Node.js でバイナリ データを処理できるようにします。Node.js で I/O 操作中に移動されたデータを処理する必要があるときはいつでも、バッファ ライブラリを使用できます。 。生データは Buffer クラスのインスタンスに保存されます。バッファは整数配列に似ていますが、V8 ヒープ メモリの外側にある生のメモリの一部に対応します。

  1. ascii - 7 ビット ASCII データのみがサポートされます。このエンコードは、上位ビットが削除されると非常に高速になります。
  2. utf8 - マルチバイトでエンコードされた Unicode 文字。多くの Web ページやその他のドキュメント形式では UTF-8 が使用されます。
  3. utf16le - 2 バイトまたは 4 バイトのリトルエンディアンでエンコードされた Unicode 文字。サロゲート ペア (U+10000 ~ U+10FFFF) をサポートします。
  4. ucs2 - utf16le のエイリアス。
  5. Base64 - Base64 エンコードBase64_Baidu 百科事典
  6. latin1 - バッファを 1 バイトのエンコード文字列にエンコードする方法。
  7. binary - latin1 の別名。
  8. hex - 各バイトを 2 つの 16 進文字にエンコードします。

[実験1]以下のプログラムを実行します。

実行結果のスクリーンショット

バッファクラスの作成

Buffer は、Buffer クラスを作成するための次の API を提供します。

  1. Buffer.alloc(size[, fill[,coding]]) : 指定されたサイズの Buffer インスタンスを返します。fill が設定されていない場合は、デフォルトで 0 が埋められます。
  2. Buffer.allocUnsafe(size) : 指定されたサイズの Buffer インスタンスを返しますが、初期化されないため、機密データが含まれる可能性があります。
  3. Buffer.allocUnsafeSlow(サイズ)
  4. Buffer.from(array) : array の値によって初期化された新しい Buffer インスタンスを返します (渡される配列の要素は数値のみです。それ以外の場合は自動的に 0 で上書きされます)。
  5. Buffer.from(arrayBuffer[, byteOffset[, length]]) : 指定された ArrayBuffer と同じメモリを共有する新しい Buffer を返します。
  6. Buffer.from(buffer) : 受信した Buffer インスタンスのデータをコピーし、新しい Buffer インスタンスを返します。
  7. Buffer.from(string[, encoding]) : string の値によって初期化された新しい Buffer インスタンスを返します。

【実験2】以下のプログラムを実行し、buf1-6の内容を出力し、結果のスクリーンショットを撮る

書き込みバッファ

buf.write(文字列[, オフセット[, 長さ]][, エンコーディング])

パラメータは次のように説明されます。

string -バッファに書き込む文字列。

offset -バッファへの書き込みが開始されるインデックス値、デフォルトは 0 です。

length -書き込まれたバイト数、デフォルトはbuffer.length

エンコーディング -使用するエンコーディング。デフォルトは「utf8」です。

戻り値

書き込まれた実際のサイズを返します。バッファスペースが不十分な場合は、文字列の一部のみが書き込まれます。

[実験 3]次のコードを実行します。

実行結果のスクリーンショット:

バッファからデータを読み取る

文法

ノード バッファ データを読み取るための構文は次のとおりです。

buf.toString([エンコーディング[, 開始[, 終了]]])

パラメータは次のように説明されます

エンコーディング -使用するエンコーディング。デフォルトは「utf8」です。

start -読み取りを開始するインデックス位置を指定します。デフォルトは 0 です。

end -終了位置。デフォルトはバッファの末尾です。

戻り値

バッファ データをデコードし、指定されたエンコーディングを使用して文字列を返します。

【実験4】以下のコードを実行してみる

実行結果のスクリーンショット: 

バッファをJSONオブジェクトに変換

【実験5】コードを実行してみる

実行結果のスクリーンショット:

 

バッファマージ

文法

ノード バッファーの結合の構文は次のとおりです。

Buffer.concat(リスト[, totalLength])

パラメータは次のように説明されます

list - マージに使用される Buffer オブジェクトの配列リスト。

totalLength - 結合された Buffer オブジェクトの合計の長さを指定します。

戻り値

複数のメンバーがマージされた新しい Buffer オブジェクトを返します。

[実験6]次のプログラムを実行します。

実行結果のスクリーンショット:

Node.js ストリーム(ストリーム)

ストリームからデータを読み取る

次の内容を含む input.txt ファイルを作成します。

寧夏大学新華学院情報コンピュータサイエンス学科:コンピュータサイエンス&テクノロジー専攻

【実験7】以下のプログラムを実行してみる

実行結果のスクリーンショット:

書き込みストリーム

[実験8 ] main.jsファイルを作成します。コードは次のとおりです。

実行結果のスクリーンショット:

パイプの流れ

パイプは、出力ストリームから入力ストリームへのメカニズムを提供します。通常、これを使用して、あるストリームからデータを取得し、そのデータを別のストリームに渡します。

[実験9]以下の内容のinput.txtファイルを作成します。

寧夏大学新華学院情報コンピュータサイエンス学科:コンピュータサイエンス&テクノロジー専攻

次のコードを実行します。

実行結果のスクリーンショット:

このプログラムの機能は次のとおりです。

ファイルをより効率的に処理し、ファイルのコピー操作を簡素化できます。

おすすめ

転載: blog.csdn.net/weixin_57398221/article/details/124100191