Node.js のファイル フローの詳細な分析
この記事では Nodejs のファイル フローを分析します。皆さんのお役に立てれば幸いです。
ファイル ストリーム
コンピュータ内のさまざまなメディアには読み取り速度や保存速度、容量が異なるため、いずれかのメディアに長期的な問題が発生する可能性があります。待機状態
ファイル ストリームには、入力ストリーム (読み取り可能) 、出力ストリーム (書き込み可能) 、 の 3 つの主なタイプがあります。二重ストリーム (二重) 。一般的には使用されない別のタイプのストリームがあります。これは、Transform ストリーム (Transform)
であり、node にストリーム モジュールを提供します。このモジュール: Readable と Writable、これら 2 つのクラスはストリーム内で継承されるため、多くの共通メソッドが存在します。
読み取り可能ストリーム (Readable)
入力ストリーム: データはソースからメモリに流れ、ディスク内のデータがメモリに転送されます。
createReadStream
fs.createReadStream(path,configuration)
設定には、encoding (エンコード方法)、start (バイトの読み取り開始) があります。 )、end (読み取りバイトの終わり)、highWaterMark (各読み取りの量)
highWaterMark: エンコーディングに値がある場合、この数値は文字数を表し、エンコーディングが null の場合、この数値は文字数を表します。文字数 セクション数
Readable サブクラス ReadStream
const readable = fs.createReadStream(filename, { エンコーディング: 'utf-8'、 開始: 1、 終わり: 2、 // ハイウォーターマーク: });
イベントの登録
readable.on(イベント名、ハンドラー関数)
readable.on('open', (err, data)=> { // console.log(err); console.log('文件打开了'); }) readable.on('error', (data, err) => { console.log(data, err); console.log('读取文件发生错误'); }) readable.on('close', (data, err) => { // console.log(data, err); console.log('文件关闭'); }) readable.close() // 手动触发通过 readable.close()或者在文件读取完毕之后自动关闭--autoClose配置项默认为 true readable.on('data', (data) => { console.log(data); console.log('文件正在读取'); }) readable.on('end', ()=>{ console.log('文件读取完毕'); })
読み取りを一時停止
readable.pause() 読書を一時停止し、一時停止イベントをトリガーします。
読書を再開します。
readable.resume() 読書を再開します。イベントを再開
#書き込み可能なストリーム
##const ws = fs.createWriteStream(filename[,configuration])# #ws.write (data)
データを書き込みます。データは文字列またはバッファで、ブール値を返します。
true が返された場合は、書き込みチャネルがいっぱいではないことを意味し、次のデータを直接書き込むことができます。書き込みチャネルは、構成内の highWaterMark で示されるサイズです。
false が返された場合は、書き込みチャネルがいっぱいで、残りの文字が待機し始め、バック プレッシャーが発生していることを意味します。
const ws = fs.createWriteStream(filename, { encoding: 'utf-8', highWaterMark: 2 }) const flag = ws.write('刘'); console.log(flag); // false 这里虽然只会执行一次,但是在通道有空余空间的时候就会继续写入,并不在返回 值。 ws.write() 只会返回一次值。 const flag = ws.write('a'); console.log(flag); const flag1 = ws.write('a'); console.log(flag1); const flag2 = ws.write('a'); console.log(flag2); const flag3 = ws.write('a'); console.log(flag3); 输出顺序:true、false、false、false 第二次写入的时候已经占了两字节,第三次写入后直接占满了,所以返回false
ストリームを使用してファイルをコピーして貼り付け、バック プレッシャーの問題を解決する
const filename = path.resolve(__dirname, './file/write.txt'); const wsfilename = path.resolve(__dirname, './file/writecopy.txt'); const ws = fs.createWriteStream(wsfilename); const rs = fs.createReadStream(filename) rs.on('data', chumk => { const falg = ws.write(chumk); if(!falg) { rs.pause(); } }) ws.on('drain', () => { rs.resume(); }) rs.on('close', () => { ws.end(); console.log('copy end'); })
パイプを使用すると、ストリームを直接読み書きすることもできます連続ストリーミングはバック プレッシャーの問題も解決できます
rs.pipe(ws); rs.on('close', () => { ws.end(); console.log('copy end'); })
学習後、ファイル ストリーミングは大量のファイルの読み書きを行う場合に非常に便利で、迅速かつ効率的に行うことができると感じました。 ##writeFile
とreadFile ははるかに効率的であり、正しく処理されれば大きなブロックは発生しません。
ノード関連の知識の詳細については、
nodejs チュートリアル
以上がNode.js のファイル フローの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック











この記事では、NodeJS V8 エンジンのメモリとガベージ コレクター (GC) について詳しく説明します。

ノンブロッキングおよびイベント駆動に基づいて構築されたノード サービスには、メモリ消費量が少ないという利点があり、大量のネットワーク リクエストの処理に非常に適しています。大量のリクエストを前提として、「メモリ制御」に関する問題を考慮する必要があります。 1. V8 のガベージ コレクション メカニズムとメモリ制限 Js はガベージ コレクション マシンによって制御されます

ノード用の Docker イメージの選択は些細なことのように思えるかもしれませんが、イメージのサイズと潜在的な脆弱性は、CI/CD プロセスとセキュリティに大きな影響を与える可能性があります。では、最適な Node.js Docker イメージを選択するにはどうすればよいでしょうか?

Node 19 が正式リリースされましたので、この記事では Node.js 19 の 6 つの主要な機能について詳しく説明します。

ファイル モジュールは、ファイルの読み取り/書き込み/開く/閉じる/削除の追加など、基礎となるファイル操作をカプセル化したものです。ファイル モジュールの最大の特徴は、すべてのメソッドが **同期** と ** の 2 つのバージョンを提供することです。 asynchronous**、sync サフィックスが付いているメソッドはすべて同期メソッドであり、持たないメソッドはすべて異種メソッドです。

イベント ループは Node.js の基本的な部分であり、メイン スレッドがブロックされていないことを確認することで非同期プログラミングが可能になります。イベント ループを理解することは、効率的なアプリケーションを構築するために重要です。次の記事では、Node のイベント ループについて詳しく説明します。お役に立てれば幸いです。

Node.js はどのように GC (ガベージ コレクション) を行うのでしょうか?次の記事で詳しく説明します。

Nodejs実行可能ファイルをpkgでパッケージ化するにはどうすればよいですか?次の記事では、pkg を使用して Node プロジェクトを実行可能ファイルにパッケージ化する方法を紹介します。
