ホームページ ウェブフロントエンド jsチュートリアル Node.js_node.js のバッファリングおよびストリーミング モジュールの詳細な紹介

Node.js_node.js のバッファリングおよびストリーミング モジュールの詳細な紹介

May 16, 2016 pm 04:14 PM
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 文字列型 - 使用するエンコーディング方法。パラメータはオプションです。

4. クラス メソッド: Buffer.isEncoding(encoding): 指定されたエンコーディングが有効な場合は true を返し、それ以外の場合は false を返します。

5. クラスメソッド: Buffer.isBuffer(obj): この obj が Buffer であるかどうかをテストします。Return Boolean
。 6. クラスメソッド: Buffer.concat(list, [totalLength]): list {Array} 配列型、バッファ配列、接続されていました。 totalLength {Number} 型 上記のバッファ配列内のすべてのバッファの合計サイズ。
ファイルを読み取ってバッファのインスタンスを取得するだけでなく、次のように直接構築することもできます。

var bin = 新しいバッファ([ 0x48, 0x65, 0x6c, 0x6c, 0x6c ]);


バッファは文字列に似ています。 .length 属性を使用してバイト長を取得するだけでなく、[index] メソッドを使用して指定された位置のバイトを読み取ることもできます。たとえば、


bin[0]; // => 0x48;


たとえば、指定されたエンコーディングを使用して、バッファと文字列を相互に変換できます。


var str = bin.toString('utf-8'); // =>

.slice メソッドは新しいバッファーを返しませんが、以下に示すように、元のバッファーの中央の位置へのポインターを返すのと似ています。


コードをコピー コードは次のとおりです: 1.[ 0x48、0x65、0x6c、0x6c、0x6c ]
2. ^ ^ ^
3. |
4. ビン bin.slice(2)



書き込みバッファ


コードをコピーします コードは次のとおりです: varbuffer = new Buffer(8);//8バイトのメモリを割り当てたバッファを作成します
console.log(buffer.write('a','utf8'));//出力 1


これにより、文字「a」がバッファに書き込まれ、ノードはエンコード後にバッファに書き込まれたバイト数を返します。ここでの文字 a の UTF-8 エンコードは 1 バイトを占めます。

バッファをコピー

Node.js は、Buffer オブジェクトの内容全体を別の Buffer オブジェクトにコピーするメソッドを提供します。既存の Buffer オブジェクト間でのみコピーできるため、Buffer オブジェクトを作成する必要があります。


コードをコピー コードは次のとおりです: buffer.copy(bufferToCopyTo)


このうち、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('世界!');
// 現在、これ以上の書き込みは許可されていません
});
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

PHP は行を CSV にフォーマットし、ファイル ポインターを書き込みます PHP は行を CSV にフォーマットし、ファイル ポインターを書き込みます Mar 22, 2024 am 09:00 AM

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

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

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

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

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

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

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

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

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

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

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

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

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

ノードがnpmコマンドを使用できない場合はどうすればよいですか? ノードがnpmコマンドを使用できない場合はどうすればよいですか? Feb 08, 2023 am 10:09 AM

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

See all articles