Node.js はストリームをどのように処理しますか?ストリームエンコーディングを設定するにはどうすればよいですか?

PHPz
リリース: 2023-04-07 13:46:14
オリジナル
565 人が閲覧しました

Node.js はイベント駆動型の非同期 I/O フレームワークであり、サーバー上の JavaScript の実行環境と言えます。シングルスレッド、ノンブロッキング I/O、イベント駆動などの特性により広く使用されています。ファイルストリームを処理する場合、文字化けなどの問題を回避するためにエンコードの設定が必要です。

Node.js のストリーム処理

Node.js のストリーム (Stream) は、大規模なデータ コレクションの処理に使用できる抽象インターフェイスです。ストリームはパイプラインと同様の方法でデータ送信を実装し、次のステップに進む前にデータ コレクション全体が表示されるのを待つことなく、データをセグメントに分割して処理します。したがって、大量のデータまたは大きなファイルを処理する場合、ストリームによりメモリ フットプリントと処理時間を大幅に削減できます。

Node.js には、ReadableWritableDuplexTransform という 4 つの基本的なストリーム オブジェクトがあります。その中で、Readable ストリームと Writeable ストリームが最も広く使用されています。

Readable ストリームは、処理のためにデータを Node.js に読み取る入力ストリームとして理解できます。書き込み可能ストリームは、データをターゲットの場所に出力する出力ストリームです。パイプなど 2 つのストリームを組み合わせて、データの送信を処理できます。

Node.jsのストリーム操作処理において、中国語が文字化けする問題が発生する場合があります。現時点では、この問題を解決するためにエンコーディングを設定する必要があります。

ストリーム エンコーディングの設定

Node.js では、ストリームのエンコーディングは setEncoding() メソッドを使用して設定されます。読み取りおよび書き込み可能なストリームのエンコード設定を行うことができます。

たとえば、読み取り可能なストリームのエンコーディングを次のように設定します。

const fs = require('fs');

const readableStream = fs.createReadStream('test.txt', 'utf8');
readableStream.setEncoding('utf8');
ログイン後にコピー

このとき、読み取り可能なストリームは、エンコーディング タイプに従ってセグメント内のデータを読み取り、セグメントを分割します。データ出力。同様に、書き込み可能なストリームの場合は、setEncoding() メソッドを使用してエンコードを設定することもできます。例:

const fs = require('fs');

const writableStream = fs.createWriteStream('output.txt', 'utf8');
writableStream.setEncoding('utf8');
ログイン後にコピー

Node.js V8.0.0 バージョンより前では、ストリーム エンコーディングの設定は文字列に対してのみ有効であることに注意してください。バイナリ データの読み取りおよび書き込みを行う場合は、 # を使用する必要があります。 ##バッファオブジェクト。

したがって、文字列以外のデータの読み取りおよび書き込み時にエンコードを使用したい場合は、次のように、読み取りおよび書き込み時にデータをシリアル化および逆シリアル化する必要があります。エンコードを使用することで、Node.js ストリームの処理中の文字化けなどの問題を回避できます。

概要

Node.js ストリーム処理は、大規模なデータ セットや大規模なファイルの処理に非常に適しています。ストリームデータを処理する場合は、中国語の文字化けなどの問題を避けるため、エンコーディングの設定に注意してください。 Node.js V8.0.0 より前では、エンコーディングの設定は文字列に対してのみ有効でした。非文字列データを処理する必要がある場合は、

Buffer

オブジェクトを使用してデータをシリアル化および逆シリアル化する必要があります。

以上がNode.js はストリームをどのように処理しますか?ストリームエンコーディングを設定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート