Node.js_node.js のバッファリングおよびストリーミング モジュールの詳細な紹介
バッファモジュール
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} 型 上記のバッファ配列内のすべてのバッファの合計サイズ。
ファイルを読み取ってバッファのインスタンスを取得するだけでなく、次のように直接構築することもできます。
たとえば、指定されたエンコーディングを使用して、バッファと文字列を相互に変換できます。
.slice メソッドは新しいバッファーを返しませんが、以下に示すように、元のバッファーの中央の位置へのポインターを返すのと似ています。
4. ビン bin.slice(2)
これにより、文字「a」がバッファに書き込まれ、ノードはエンコード後にバッファに書き込まれたバイト数を返します。ここでの文字 a の UTF-8 エンコードは 1 バイトを占めます。
バッファをコピー
Node.js は、Buffer オブジェクトの内容全体を別の Buffer オブジェクトにコピーするメソッドを提供します。既存の Buffer オブジェクト間でのみコピーできるため、Buffer オブジェクトを作成する必要があります。
このうち、bufferToCopyTo はコピー対象の Buffer オブジェクトです。以下の例:
varbuffer1 = 新しいバッファ(8);
buffer1.write('初めまして','utf8');
varbuffer2 = 新しいバッファ(8);
バッファ1.コピー(バッファ2);
console.log(buffer2.toString());//初めまして
ストリームモジュール
UNIX タイプのオペレーティング システムでは、ストリームは標準概念です。次の 3 つの主要なストリームがあります:
1.標準入力
2.標準出力
3.標準誤差
読み取り可能なストリーム
Node.js が生データを処理する方法がバッファーである場合、通常、Node.js がデータを移動する方法はストリームです。 Node.js のストリームは読み取り可能または書き込み可能です。 Node.js の多くのモジュールは、HTTP やファイル システムなどのストリームを使用します。
このデータを使用するために、classesmates.txt ファイルを作成し、そこから名前のリストを読み取るとします。データはストリームであるため、ファイルの読み取りが完了する前に、最初の数バイトからデータを操作できることを意味します。これは Node.js の一般的なパターンです。
var fs = require('fs');
var stream = fs.ReadStream('classmates.txt');
stream.setEncoding('utf8');
stream.on('データ', 関数 (チャンク) {
console.log('データを読み取る')
});
stream.on('close', function () {
console.log('すべてのデータが読み取られています')
});
上記の例では、新しいデータを受信したときにイベント データがトリガーされます。ファイルの読み取りが完了すると、close イベントがトリガーされます。
書き込み可能なストリーム
もちろん、データを書き込むための書き込み可能なストリームを作成することもできます。これは、単純なスクリプトを使用して、ストリームを使用してファイルを読み取り、別のファイルに書き込むことができることを意味します。
var fs = require('fs');
var readableStream = fs.ReadStream('classmates.txt');
var writableStream = fs.writeStream('names.txt');
readableStream.setEncoding('utf8');
readableStream.on('data', 関数 (チャンク) {
writableStream.write(チャンク);
});
readableStream.on('close', function () {
writeableStream.end();
});
データ イベントを受信すると、データが書き込み可能なストリームに書き込まれるようになりました。
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() を呼び出すとエラーが生成されます。
// 「hello,」と書き、「world!」で終わります
http.createServer(function (req, res) {
res.write('こんにちは、');
res.end('世界!');
// 現在、これ以上の書き込みは許可されていません
});

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











この記事では、PHP が行を CSV にフォーマットし、ファイル ポインタを書き込む方法について詳しく説明します。非常に実践的だと思いますので、参考として共有します。この記事を読んで何かを得ることができれば幸いです。行を CSV にフォーマットし、ファイル ポインターに書き込む ステップ 1: ファイル ポインターを開く $file=fopen("path/to/file.csv","w"); ステップ 2: fputcsv( ) 関数を使用して行を CSV 文字列に変換するCSV文字列に変換します。この関数は次のパラメータを受け入れます。 $file: ファイル ポインタ $fields: 配列としての CSV フィールド $delimiter: フィールド区切り文字 (オプション) $enclosure: フィールド引用符 (

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

ノードが npm コマンドを使用できない理由は、環境変数が正しく設定されていないためです。解決策は次のとおりです: 1. 「システムのプロパティ」を開きます; 2. 「環境変数」->「システム変数」を見つけて、環境を編集します。変数; 3.nodejs フォルダーの場所を見つけます; 4.「OK」をクリックします。
