Node のストリームについて説明する記事

青灯夜游
リリース: 2023-02-27 19:18:48
転載
1551 人が閲覧しました

ストリームとは何ですか?流れをどう理解するか?次の記事では、Nodejs のストリームについて詳しく説明します。お役に立てば幸いです。

Node のストリームについて説明する記事

#stream はストリームであり、水の流れのように存在する一連のバイトとして理解できます。 公式ドキュメントの説明によると:

ストリームは、Node.js でストリーミング データを操作するための抽象インターフェイスです。

A ストリームは、Node.js でストリーミング データを操作するための抽象インターフェイスです。Node.js でのストリーム データの処理は、連続バイトの抽象インターフェイスです。 ストリームには基本的に 4 種類あり、この記事では主にそのうちの 2 つ、読み取り可能なストリームと書き込み可能なストリームを紹介します。

Readable

fs.createReadStream()readableStream を通じて読み取り可能なストリームを作成できます。最初のパラメータは次のとおりです。読み取られるファイル パス。たとえば、既存のファイル test.txt の内容は次のとおりです。

hello juejin
ログイン後にコピー

2 番目のパラメータ (オプション) は、読み取りを制御するためにオプション オブジェクトに渡すことができます。 開始と終了を取得します。データの位置など: [関連するチュートリアルの推奨事項: nodejs ビデオ チュートリアル ]

const fs = require('fs')

const readableStream = fs.createReadStream('./test.txt', {
  start: 6,
  end: 11
})
ログイン後にコピー

読み取りデータには startend ## が含まれることに注意してください。 # の。 events モジュールの導入時に前述したように、すべてのストリームは EventEmitter のインスタンスです。したがって、データは 'data' イベントをリッスンすることによって取得されます。

readableStream.on('data', data => {
  console.log(data)
  console.log(data.toString())
})
ログイン後にコピー

出力結果は次のとおりです。デフォルトは

Buffer オブジェクトです。渡された toString() 文字列に変換するメソッド:

Node のストリームについて説明する記事

データを読み取るとき、一度に最大 64 * 1024 バイトを読み取ることができることに注意してください。この値を変更したい場合は、

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)
})
ログイン後にコピー

実行結果は次のとおりです。

Node のストリームについて説明する記事

##'data'

イベントに加えて、読み取り可能なストリームには、開かれているファイルのリッスンなどの他のイベントもあります ' open' (コールバックは fd パラメータに渡されます)、リスニング ファイルが end に読み込まれるときの 'end' (デフォルトは読み取りです)最後まで)、 'close' リスニングファイルが閉じられるとき (ファイルは読み取り後に自動的に閉じられます): <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">readableStream.on(&amp;#39;data&amp;#39;, data =&gt; console.log(data)) readableStream.on(&amp;#39;open&amp;#39;, fd =&gt; console.log(`${fd}文件打开了`)) readableStream.on(&amp;#39;end&amp;#39;, () =&gt; console.log(&amp;#39;文件读取到 end 位置了&amp;#39;)) readableStream.on(&amp;#39;close&amp;#39;, () =&gt; console.log(&amp;#39;文件已关闭&amp;#39;))</pre><div class="contentsignin">ログイン後にコピー</div></div> 印刷結果は次のとおりです:

Node のストリームについて説明する記事

Writable

Use

fs.createWriteStream()

書き込み可能なストリームを作成できます。最初のパラメータはファイルに渡されますここでは、flags を上書き書き込みを示す 'w' から 'a' に変更します。これは、書き込みを追加することを意味します (書き込みの開始点も指定されている場合) 開始位置 start、Windows システムと互換性を持たせるために、flags' として書き込む必要があります。 r '): <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">const writableStream = fs.createWriteStream(&amp;#39;test.txt&amp;#39;, { flags: &amp;#39;a&amp;#39; }) writableStream.write(&amp;#39;养成&amp;#39;, err =&gt; console.log(`错误信息:${err}`)) // 错误信息:undefined writableStream.write(&amp;#39;写作的&amp;#39;) writableStream.end(&amp;#39;好习惯&amp;#39;)</pre><div class="contentsignin">ログイン後にコピー</div></div>データの書き込みは

write

メソッドを介して行われます。上記のコードを実行すると、元の「hello」の後に「良い習慣を身につける」が追加されます。ジュジン」。最後の書き込みでは end メソッドを使用して、書き込み可能ストリームの 'close' イベントを監視できます。 <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:js;toolbar:false;">writableStream.on(&amp;#39;close&amp;#39;, () =&gt; { console.log(&amp;#39;关闭&amp;#39;) })</pre><div class="contentsignin">ログイン後にコピー</div></div> それ以外の場合、書き込み可能ストリームは次のことを行う必要があります。手動で実行してください

writableStream.close()

閉じた場合のみ、'close' イベントを監視できます。書き込みが成功すると、write()/end() の 2 番目のパラメーターとして渡されるコールバックの errundefine になります。 読み取り可能なストリームには、ファイルが開かれるとき、

close()

または end() のときの 'open' イベントなど、他のイベントもあります。 'finish'イベントが呼び出され、ファイルの書き込みが完了した後。

読み取り可能なストリームと書き込み可能なストリームの接続

読み取り可能なストリームと書き込み可能なストリームは、

pipe

メソッドを介して接続して、ファイルのコピーを実現できます:

const readableStream = fs.createReadStream(&#39;./test.txt&#39;)
const writableStream = fs.createWriteStream(&#39;./copy.txt&#39;)

readableStream.pipe(writableStream)
ログイン後にコピー
このようにして、./test.txt 内のテキストを ./copy.txt にコピーできます。

ノード関連の知識の詳細については、

nodejs チュートリアル

を参照してください。

以上がNode のストリームについて説明する記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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