目次
ファイル ストリーム
読み取り可能ストリーム (Readable)
createReadStream
#書き込み可能なストリーム
データを書き込みます。データは文字列またはバッファで、ブール値を返します。
ホームページ ウェブフロントエンド jsチュートリアル Node.js のファイル フローの詳細な分析

Node.js のファイル フローの詳細な分析

Nov 19, 2021 pm 07:19 PM
node.js ファイルストリーム

この記事では Nodejs のファイル フローを分析します。皆さんのお役に立てれば幸いです。

Node.js のファイル フローの詳細な分析

ファイル ストリーム

コンピュータ内のさまざまなメディアには読み取り速度や保存速度、容量が異なるため、いずれかのメディアに長期的な問題が発生する可能性があります。待機状態

ファイル ストリームには、入力ストリーム (読み取り可能) 出力ストリーム (書き込み可能) の 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');
})
ログイン後にコピー

pipe

パイプを使用すると、ストリームを直接読み書きすることもできます連続ストリーミングはバック プレッシャーの問題も解決できます

rs.pipe(ws);

rs.on('close', () => {
    ws.end();
    console.log('copy end');
})
ログイン後にコピー

学習後、ファイル ストリーミングは大量のファイルの読み書きを行う場合に非常に便利で、迅速かつ効率的に行うことができると感じました。 ##writeFile

readFile ははるかに効率的であり、正しく処理されれば大きなブロックは発生しません。 ノード関連の知識の詳細については、nodejs チュートリアル

を参照してください。 !

以上がNode.js のファイル フローの詳細な分析の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Node V8 エンジンのメモリと GC の詳細な図による説明 Node V8 エンジンのメモリと GC の詳細な図による説明 Mar 29, 2023 pm 06:02 PM

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

Nodeのメモリ制御に関する記事 Nodeのメモリ制御に関する記事 Apr 26, 2023 pm 05:37 PM

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

最適な Node.js Docker イメージを選択する方法について話しましょう。 最適な Node.js Docker イメージを選択する方法について話しましょう。 Dec 13, 2022 pm 08:00 PM

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

Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Node.js 19 が正式リリースされました。その 6 つの主要な機能についてお話しましょう。 Nov 16, 2022 pm 08:34 PM

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

Node の File モジュールについて詳しく説明しましょう Node の File モジュールについて詳しく説明しましょう Apr 24, 2023 pm 05:49 PM

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

Nodeのイベントループについて話しましょう Nodeのイベントループについて話しましょう Apr 11, 2023 pm 07:08 PM

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

Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Node.js の GC (ガベージ コレクション) メカニズムについて話しましょう Nov 29, 2022 pm 08:44 PM

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

pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 pkg を使用して Node.js プロジェクトを実行可能ファイルにパッケージ化する方法について説明します。 Dec 02, 2022 pm 09:06 PM

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

See all articles