首頁 >web前端 >js教程 >node.js流的基礎知識

node.js流的基礎知識

Lisa Kudrow
Lisa Kudrow原創
2025-02-20 10:07:10268瀏覽

The Basics of Node.js Streams

在I/O-BON-BOND操作方面,

node.js是異步和事件驅動的。 利用Node.js流通過有效處理較小塊中的數據來大大簡化這些任務。讓我們深入研究溪流的世界,看看它們如何簡化I/O。

密鑰概念:

    通過處理可管理的部分中的數據,
  • node.js流(異步和事件驅動的)優化I/O。
  • >流被歸類為可讀,可寫的或雙工的(既可以閱讀又可寫的)。 可讀的流從源獲取數據;可寫的流將數據發送到目的地。
  • 功能是無價的,可以促進源和目的地之間無縫的數據傳輸,而無需手動流量管理。 pipe()>
  • Readable.pause()的方法提供對數據流的顆粒狀控制,增強了流功能。 Readable.resume() readable.unpipe()
理解流:

>流類似於Unix管道,從而使數據傳輸從源到目的地毫無疑問。 本質上,流是具有專門方法的流。 實現的方法確定流是可讀,可寫的還是雙工的。 可讀的流提供數據輸入;可寫的流處理數據輸出。

>您可能已經在node.js中遇到了流。 在HTTP服務器中,該請求是可讀的流,並且響應是可寫的流。 EventEmitter模塊提供可讀和可寫的文件流功能。 >

本文專注於可讀和可寫的流。雙工流不在其範圍之內。

fs

>可讀流:

>可讀的流從源讀取數據(文件,內存緩衝區或其他流)。 在 s時,它們會觸發各種事件。我們利用這些事件與流相互作用。

從流中讀取:

EventEmitter最常見的方法是聆聽

>事件並附加回調。 當數據可用時,

事件會觸發,執行回調。

>創建一個可讀的流。 最初是靜態的,它開始在附加a

>事件偵聽器時流動。 然後將數據塊傳遞給回調。 事件的頻率由流實現確定(例如,HTTP請求可能會散發出每幾個kb的事件,而文件流可能每行發射)。 datadata事件向數據結束髮出信號。

>
<code class="language-javascript">const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });</code>
替代,在流實例上反複調用

,直到讀取所有數據:>

<code class="language-javascript">const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });</code>

read()從內部緩衝區檢索數據。 當沒有數據保留時,它將返回nullreadable事件指示數據可用性。

>

>設置編碼:

數據通常是

>對象。 對於字符串,使用BufferReadable.setEncoding()>

<code class="language-javascript">const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
let chunk;
readableStream.on('readable', () => {
  while ((chunk = readableStream.read()) !== null) {
    data += chunk;
  }
});
readableStream.on('end', () => { console.log(data); });</code>
這將數據解釋為UTF-8,將其作為字符串傳遞給回調。

管道:

> 管道簡化了源和目標之間的數據傳輸:

<code class="language-javascript">const fs = require('fs');
const readableStream = fs.createReadStream('file.txt');
let data = '';
readableStream.setEncoding('utf8');
readableStream.on('data', (chunk) => { data += chunk; });
readableStream.on('end', () => { console.log(data); });</code>
>自動處理數據流。

> pipe()

鏈接:

>可以鏈接:

這個解壓縮
<code class="language-javascript">const fs = require('fs');
const readableStream = fs.createReadStream('file1.txt');
const writableStream = fs.createWriteStream('file2.txt');
readableStream.pipe(writableStream);</code>
並將結果寫入

>。 input.txt.gz> output.txt

其他可讀流方法:

>

    :暫停流。
  • Readable.pause()
  • :恢復暫停的流。
  • Readable.resume()
  • :從管道中刪除目標流。 >
  • readable.unpipe()
  • 可寫的流:

可寫的流將數據發送到目的地。 像可讀的流一樣,它們是s。

寫入流:EventEmitter

>使用

發送數據:>

>返回表明成功的布爾值。 如果是錯誤的,則流暫時滿;等待write()>事件,然後再寫更多內容。

<code class="language-javascript">const fs = require('fs');
const zlib = require('zlib');
fs.createReadStream('input.txt.gz')
  .pipe(zlib.createGunzip())
  .pipe(fs.createWriteStream('output.txt'));</code>

數據的結尾: write() drain>呼叫

向數據結束髮出信號。 刷新所有數據後,發出

事件。 打電話後不能寫

重要的可寫流事件:

end()> finish end()

:指示一個錯誤。

> :發出可讀的流時發出的。

>
  • :在可讀的流上調用error時發出。
  • >
  • pipe
  • 結論:
  • unpipe>流是Node.js的強大功能,增強了I/O效率。 了解流,管道和鏈接可以使寫作清潔,性能的代碼。 unpipe()>
node.js流式常見問題:

>

>什麼是node.js streams?

它們是允許對數據進行有效的,增量處理的對象,避免將整個數據集加載到存儲器中。 >

Node.js流的主要類型

    可讀,可寫的,雙工和變換。
  • >

    >創建一個可讀的流?
  • 用於可讀流的常見用例?

    >創建一個可寫的流?
  • >可寫流的常見用途? 將數據保存到文件,將數據發送到服務。

  • 雙面流?

  • >
  • >轉換流? >修改數據通過時(例如,壓縮,加密)。

    >

    >流之間的管道數據?
  • 使用Node.js流? >

    最佳實踐? .pipe()

以上是node.js流的基礎知識的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn