バッファモジュール
js はもともとブラウザー用に設計されたため、Unicode でエンコードされた文字列をうまく処理できますが、バイナリ データをうまく処理できません。 Node.js は、多くの場合バイナリ形式でネットワーク経由でデータを送受信するように設計されているため、これは Node.js の問題です。例:
- TCP 接続経由でデータを送受信します。
- 画像または圧縮ファイルからバイナリ データを読み取ります。
- ファイル システムからのデータの読み取りと書き込み
- ネットワークからのバイナリ データ ストリームを処理します
Buffer モジュールは、生データを Node.js に保存する方法を提供するため、js のコンテキストでバイナリ データを使用できます。 Node.js の I/O 操作で移動されたデータを処理する必要がある場合は、常に Buffer モジュールを使用できます。
クラス: バッファ
Buffer クラスは、バイナリ データを直接処理するために使用されるグローバル変数タイプです。 さまざまな方法で構築できます。
元のデータは Buffer クラスのインスタンスに保存されます。 Buffer インスタンスは整数配列
に似ています。1.new Buffer(size): サイズが 8 ビット バイトの新しいバッファを割り当てます。
2.new Buffer(array): 8 ビットのバイト配列
を使用して新しいバッファを割り当てます。
3.new Buffer(str, [encoding]):encoding 文字列型 - 使用するエンコーディング方法。パラメータはオプションです。
5. クラスメソッド: Buffer.isBuffer(obj): この obj が Buffer であるかどうかをテストします。Return Boolean
。
6. クラスメソッド: Buffer.concat(list, [totalLength]): list {Array} 配列型、バッファ配列、接続されていました。 totalLength {Number} 型 上記のバッファ配列内のすべてのバッファの合計サイズ。
ファイルを読み取ってバッファのインスタンスを取得するだけでなく、次のように直接構築することもできます。
Node.js は、Buffer オブジェクトの内容全体を別の Buffer オブジェクトにコピーするメソッドを提供します。既存の Buffer オブジェクト間でのみコピーできるため、Buffer オブジェクトを作成する必要があります。
ストリームモジュール
UNIX タイプのオペレーティング システムでは、ストリームは標準概念です。次の 3 つの主要なストリームがあります:
1.標準入力
2.標準出力
3.標準誤差
読み取り可能なストリーム
Node.js が生データを処理する方法がバッファーである場合、通常、Node.js がデータを移動する方法はストリームです。 Node.js のストリームは読み取り可能または書き込み可能です。 Node.js の多くのモジュールは、HTTP やファイル システムなどのストリームを使用します。
このデータを使用するために、classesmates.txt ファイルを作成し、そこから名前のリストを読み取るとします。データはストリームであるため、ファイルの読み取りが完了する前に、最初の数バイトからデータを操作できることを意味します。これは Node.js の一般的なパターンです。
上記の例では、新しいデータを受信したときにイベント データがトリガーされます。ファイルの読み取りが完了すると、close イベントがトリガーされます。
書き込み可能なストリーム
もちろん、データを書き込むための書き込み可能なストリームを作成することもできます。これは、単純なスクリプトを使用して、ストリームを使用してファイルを読み取り、別のファイルに書き込むことができることを意味します。
データ イベントを受信すると、データが書き込み可能なストリームに書き込まれるようになりました。
readable.setEncoding(encoding): return: this
readable.resume(): 上記と同じ。このメソッドを使用すると、読み取り可能なストリームがデータ イベントを発生し続けることができます。
readable.pause(): 上記と同じ。このメソッドにより、フロー モードのストリームがデータ イベントの発生を停止し、非フロー モードに切り替わり、後続の使用可能なデータが内部バッファに残されます。
クラス: stream.Writable
Writable ストリーム インターフェイスは、ターゲットに書き込むデータを抽象化したものです。
1.writable.write(チャンク, [エンコーディング], [コールバック]):
チャンク {String | Buffer} 書き込むデータ
エンコーディング {String} エンコーディング、チャンクが文字列
の場合
callback {Function} データブロックが書き込まれた後のコールバック
戻り値: {Boolean} データが完全に処理された場合は true。
このメソッドは、基礎となるシステムにデータを書き込み、データが処理された後に指定されたコールバックを呼び出します。
2.writable.cork(): すべての書き込みを強制的に維持します。
保持されたデータは、.uncork() または .end() が呼び出されたときに書き込まれます。
3.writable.end([チャンク], [エンコーディング], [コールバック])
チャンク {String | Buffer} はオプション、書き込まれるデータ
エンコーディング {String} エンコーディング、チャンクが文字列
の場合
callback {Function} オプション、ストリーム終了後のコールバック
end() を呼び出した後に write() を呼び出すとエラーが生成されます。