ホームページ > 記事 > ウェブフロントエンド > Node のストリームについて説明する記事
ストリームとは何ですか?流れをどう理解するか?次の記事では、Nodejs のストリームについて詳しく説明します。お役に立てば幸いです。
#stream はストリームであり、水の流れのように存在する一連のバイトとして理解できます。 公式ドキュメントの説明によると:
ストリームは、Node.js でストリーミング データを操作するための抽象インターフェイスです。
A ストリームは、Node.js でストリーミング データを操作するための抽象インターフェイスです。Node.js でのストリーム データの処理は、連続バイトの抽象インターフェイスです。 ストリームには基本的に 4 種類あり、この記事では主にそのうちの 2 つ、読み取り可能なストリームと書き込み可能なストリームを紹介します。
fs.createReadStream()
readableStream
を通じて読み取り可能なストリームを作成できます。最初のパラメータは次のとおりです。読み取られるファイル パス。たとえば、既存のファイル test.txt の内容は次のとおりです。
hello juejin
2 番目のパラメータ (オプション) は、読み取りを制御するためにオプション オブジェクトに渡すことができます。 開始と終了を取得します。データの位置など: [関連するチュートリアルの推奨事項: nodejs ビデオ チュートリアル ]
const fs = require('fs') const readableStream = fs.createReadStream('./test.txt', { start: 6, end: 11 })
読み取りデータには start
と end ## が含まれることに注意してください。 # の。
events モジュールの導入時に前述したように、すべてのストリームは EventEmitter のインスタンスです。したがって、データは
'data' イベントをリッスンすることによって取得されます。
readableStream.on('data', data => { console.log(data) console.log(data.toString()) })出力結果は次のとおりです。デフォルトは
Buffer オブジェクトです。渡された toString() 文字列に変換するメソッド:
highWaterMark 変更されたオプションを渡すことができます。さらに、
pause() を使用して操作を一時停止し、
resume() を使用して読み取りを続けることもできます。
const readableStream = fs.createReadStream('./test.txt', { start: 6, end: 11, highWaterMark: 2 // 默认为 64 * 1024 }) readableStream.on('data', data => { console.log(data) console.log(data.toString()) readableStream.pause() // 暂停读取 setTimeout(() => { readableStream.resume() // 恢复读取 }, 2000) })実行結果は次のとおりです。 ##'data'
イベントに加えて、読み取り可能なストリームには、開かれているファイルのリッスンなどの他のイベントもあります ' open'
(コールバックは fd
パラメータに渡されます)、リスニング ファイルが end に読み込まれるときの 'end'
(デフォルトは読み取りです)最後まで)、 'close' リスニングファイルが閉じられるとき
(ファイルは読み取り後に自動的に閉じられます): <pre class="brush:js;toolbar:false;">readableStream.on(&#39;data&#39;, data => console.log(data))
readableStream.on(&#39;open&#39;, fd => console.log(`${fd}文件打开了`))
readableStream.on(&#39;end&#39;, () => console.log(&#39;文件读取到 end 位置了&#39;))
readableStream.on(&#39;close&#39;, () => console.log(&#39;文件已关闭&#39;))</pre>
印刷結果は次のとおりです:
書き込み可能なストリームを作成できます。最初のパラメータはファイルに渡されますここでは、flags
を上書き書き込みを示す 'w'
から 'a'
に変更します。これは、書き込みを追加することを意味します (書き込みの開始点も指定されている場合) 開始位置 start
、Windows システムと互換性を持たせるために、flags
は ' として書き込む必要があります。 r '
): <pre class="brush:js;toolbar:false;">const writableStream = fs.createWriteStream(&#39;test.txt&#39;, {
flags: &#39;a&#39;
})
writableStream.write(&#39;养成&#39;, err => console.log(`错误信息:${err}`)) // 错误信息:undefined
writableStream.write(&#39;写作的&#39;)
writableStream.end(&#39;好习惯&#39;)</pre>
データの書き込みは
メソッドを介して行われます。上記のコードを実行すると、元の「hello」の後に「良い習慣を身につける」が追加されます。ジュジン」。最後の書き込みでは end
メソッドを使用して、書き込み可能ストリームの 'close'
イベントを監視できます。 <pre class="brush:js;toolbar:false;">writableStream.on(&#39;close&#39;, () => {
console.log(&#39;关闭&#39;)
})</pre>
それ以外の場合、書き込み可能ストリームは次のことを行う必要があります。手動で実行してください
閉じた場合のみ、'close'
イベントを監視できます。書き込みが成功すると、write()/end()
の 2 番目のパラメーターとして渡されるコールバックの err
は undefine
になります。 読み取り可能なストリームには、ファイルが開かれるとき、
または end() のときの
'open' イベントなど、他のイベントもあります。
'finish'
イベントが呼び出され、ファイルの書き込みが完了した後。
メソッドを介して接続して、ファイルのコピーを実現できます: <pre class="brush:js;toolbar:false;">const readableStream = fs.createReadStream(&#39;./test.txt&#39;)
const writableStream = fs.createWriteStream(&#39;./copy.txt&#39;)
readableStream.pipe(writableStream)</pre>
このようにして、./test.txt 内のテキストを ./copy.txt にコピーできます。
ノード関連の知識の詳細については、
nodejs チュートリアル以上がNode のストリームについて説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。