メモリから時間のかかる効率的な方法でファイルからUTF-8テキストを読み取ろうとしています。 ノード内のReadStreamから同期して読み取る方法
fs.readSync
ファイルからバイトのセット量を読んで返します
fs.readFileSync
は、ファイル全体を読み込むと、ファイルの内容全体を含むバッファを返します。同期したファイルから直接読み込むには、2つの方法があります。それが最も簡単ですので、私が最初にちょうどfs.readFileSync
を使用しますが、私は効率的に一度にテキストのチャンクで読み取ることにより、潜在的に大きなファイルを扱うことができるようにしたいのですがちょうどその内容
を含むバッファー。そこで私は代わりにfs.readSync
を使い始めました。しかし、私はfs.readSync
がUTF-8デコードを処理しないことに気付きました。 UTF-8はシンプルなので、手作業でデコードするためにいくつかのロジックを取り上げることができますが、Nodeには既にサービスがありますので、可能ならばそれを避けたいと思います。
私はfs.createReadStream
を気付きました。この目的のために使用できるReadStream
が返されますが、残念ながら非同期操作モードでしか使用できないようです。
ReadStream
から同期的に読み取る方法はありますか?私はこれの上に既に大規模なスタックを構築しているので、非同期であることをリファクタリングする必要はありません。
ストリームは非同期です。それを変更することはできません。もちろん、ストリームからファイルハンドルを取得し、 'readSync()'と同期してファイルハンドルを読み取ることもできますが、ストリームのインターフェースをまったく使用していないため、既に試したものより優れていません。 – jfriend00
私は、エンコードと 'readSync()'の問題は、ファイルからのバイトの任意の読み込みがマルチバイト文字の配置を知る方法がないため、UTF- 8エンコード。一方、ストリーム、または 'fs.readFileSync()'はファイルの先頭から始まり、アラインメントを保証することができます。 – jfriend00
はい、これはまさに問題です。基本的に私は、ファイルから個別にデコードされた文字を読み込む方法を探していますが、同期しています。私が言ったように、私は準備している 'readSync'の上にレイヤーとして自分自身でデコードロジックを実装することができましたが、Nodeのボックスの外でこれが既に可能であるかどうか不思議でした。 – jchitel