検索
ホームページウェブフロントエンドjsチュートリアル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 文字列型 - 使用するエンコーディング方法。パラメータはオプションです。

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 までご連絡ください。
JavaScriptはCで書かれていますか?証拠を調べるJavaScriptはCで書かれていますか?証拠を調べるApr 25, 2025 am 12:15 AM

はい、JavaScriptのエンジンコアはCで記述されています。1)C言語は、JavaScriptエンジンの開発に適した効率的なパフォーマンスと基礎となる制御を提供します。 2)V8エンジンを例にとると、そのコアはCで記述され、Cの効率とオブジェクト指向の特性を組み合わせて書かれています。3)JavaScriptエンジンの作業原理には、解析、コンパイル、実行が含まれ、C言語はこれらのプロセスで重要な役割を果たします。

JavaScriptの役割:WebをインタラクティブでダイナミックにするJavaScriptの役割:WebをインタラクティブでダイナミックにするApr 24, 2025 am 12:12 AM

JavaScriptは、Webページのインタラクティブ性とダイナミズムを向上させるため、現代のWebサイトの中心にあります。 1)ページを更新せずにコンテンツを変更できます。2)Domapiを介してWebページを操作する、3)アニメーションやドラッグアンドドロップなどの複雑なインタラクティブ効果、4)ユーザーエクスペリエンスを改善するためのパフォーマンスとベストプラクティスを最適化します。

CおよびJavaScript:接続が説明しましたCおよびJavaScript:接続が説明しましたApr 23, 2025 am 12:07 AM

CおよびJavaScriptは、WebAssemblyを介して相互運用性を実現します。 1)CコードはWebAssemblyモジュールにコンパイルされ、JavaScript環境に導入され、コンピューティングパワーが強化されます。 2)ゲーム開発では、Cは物理エンジンとグラフィックスレンダリングを処理し、JavaScriptはゲームロジックとユーザーインターフェイスを担当します。

Webサイトからアプリまで:JavaScriptの多様なアプリケーションWebサイトからアプリまで:JavaScriptの多様なアプリケーションApr 22, 2025 am 12:02 AM

JavaScriptは、Webサイト、モバイルアプリケーション、デスクトップアプリケーション、サーバー側のプログラミングで広く使用されています。 1)Webサイト開発では、JavaScriptはHTMLおよびCSSと一緒にDOMを運用して、JQueryやReactなどのフレームワークをサポートします。 2)ReactNativeおよびIonicを通じて、JavaScriptはクロスプラットフォームモバイルアプリケーションを開発するために使用されます。 3)電子フレームワークにより、JavaScriptはデスクトップアプリケーションを構築できます。 4)node.jsを使用すると、JavaScriptがサーバー側で実行され、高い並行リクエストをサポートします。

Python vs. JavaScript:ユースケースとアプリケーションと比較されますPython vs. JavaScript:ユースケースとアプリケーションと比較されますApr 21, 2025 am 12:01 AM

Pythonはデータサイエンスと自動化により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、データ処理とモデリングのためにNumpyやPandasなどのライブラリを使用して、データサイエンスと機械学習でうまく機能します。 2。Pythonは、自動化とスクリプトにおいて簡潔で効率的です。 3. JavaScriptはフロントエンド開発に不可欠であり、動的なWebページと単一ページアプリケーションの構築に使用されます。 4. JavaScriptは、node.jsを通じてバックエンド開発において役割を果たし、フルスタック開発をサポートします。

JavaScript通訳者とコンパイラにおけるC/Cの役割JavaScript通訳者とコンパイラにおけるC/Cの役割Apr 20, 2025 am 12:01 AM

CとCは、主に通訳者とJITコンパイラを実装するために使用されるJavaScriptエンジンで重要な役割を果たします。 1)cは、JavaScriptソースコードを解析し、抽象的な構文ツリーを生成するために使用されます。 2)Cは、Bytecodeの生成と実行を担当します。 3)Cは、JITコンパイラを実装し、実行時にホットスポットコードを最適化およびコンパイルし、JavaScriptの実行効率を大幅に改善します。

JavaScript in Action:実際の例とプロジェクトJavaScript in Action:実際の例とプロジェクトApr 19, 2025 am 12:13 AM

現実世界でのJavaScriptのアプリケーションには、フロントエンドとバックエンドの開発が含まれます。 1)DOM操作とイベント処理を含むTODOリストアプリケーションを構築して、フロントエンドアプリケーションを表示します。 2)node.jsを介してRestfulapiを構築し、バックエンドアプリケーションをデモンストレーションします。

JavaScriptとWeb:コア機能とユースケースJavaScriptとWeb:コア機能とユースケースApr 18, 2025 am 12:19 AM

Web開発におけるJavaScriptの主な用途には、クライアントの相互作用、フォーム検証、非同期通信が含まれます。 1)DOM操作による動的なコンテンツの更新とユーザーインタラクション。 2)ユーザーエクスペリエンスを改善するためにデータを提出する前に、クライアントの検証が実行されます。 3)サーバーとのリフレッシュレス通信は、AJAXテクノロジーを通じて達成されます。

See all articles

ホット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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

SublimeText3 Mac版

SublimeText3 Mac版

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

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール