<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??碼云GVP開源項目 12k star Uniapp+ElementUI 功能強大 支持多語言、二開方便! 廣告
                # stream `stream`是Node.js提供的又一個僅在服務區端可用的模塊,目的是支持“流”這種數據結構。 什么是流?流是一種抽象的數據結構。想象水流,當在水管中流動時,就可以從某個地方(例如自來水廠)源源不斷地到達另一個地方(比如你家的洗手池)。我們也可以把數據看成是數據流,比如你敲鍵盤的時候,就可以把每個字符依次連起來,看成字符流。這個流是從鍵盤輸入到應用程序,實際上它還對應著一個名字:標準輸入流(stdin)。 如果應用程序把字符一個一個輸出到顯示器上,這也可以看成是一個流,這個流也有名字:標準輸出流(stdout)。流的特點是數據是有序的,而且必須依次讀取,或者依次寫入,不能像Array那樣隨機定位。 ![nodejs-stream](img/l15.png) 有些流用來讀取數據,比如從文件讀取數據時,可以打開一個文件流,然后從文件流中不斷地讀取數據。有些流用來寫入數據,比如向文件寫入數據時,只需要把數據不斷地往文件流中寫進去就可以了。 在Node.js中,流也是一個對象,我們只需要響應流的事件就可以了:`data`事件表示流的數據已經可以讀取了,`end`事件表示這個流已經到末尾了,沒有數據可以讀取了,`error`事件表示出錯了。 下面是一個從文件流讀取文本內容的示例: ``` 'use strict'; var fs = require('fs'); // 打開一個流: var rs = fs.createReadStream('sample.txt', 'utf-8'); rs.on('data', function (chunk) { console.log('DATA:') console.log(chunk); }); rs.on('end', function () { console.log('END'); }); rs.on('error', function (err) { console.log('ERROR: ' + err); }); ``` 要注意,`data`事件可能會有多次,每次傳遞的`chunk`是流的一部分數據。 要以流的形式寫入文件,只需要不斷調用`write()`方法,最后以`end()`結束: ``` 'use strict'; var fs = require('fs'); var ws1 = fs.createWriteStream('output1.txt', 'utf-8'); ws1.write('使用Stream寫入文本數據...\n'); ws1.write('END.'); ws1.end(); var ws2 = fs.createWriteStream('output2.txt'); ws2.write(new Buffer('使用Stream寫入二進制數據...\n', 'utf-8')); ws2.write(new Buffer('END.', 'utf-8')); ws2.end(); ``` 所有可以讀取數據的流都繼承自`stream.Readable`,所有可以寫入的流都繼承自`stream.Writable`。 ## pipe 就像可以把兩個水管串成一個更長的水管一樣,兩個流也可以串起來。一個`Readable`流和一個`Writable`流串起來后,所有的數據自動從`Readable`流進入`Writable`流,這種操作叫`pipe`。 在Node.js中,`Readable`流有一個`pipe()`方法,就是用來干這件事的。 讓我們用`pipe()`把一個文件流和另一個文件流串起來,這樣源文件的所有數據就自動寫入到目標文件里了,所以,這實際上是一個復制文件的程序: ``` 'use strict'; var fs = require('fs'); var rs = fs.createReadStream('sample.txt'); var ws = fs.createWriteStream('copied.txt'); rs.pipe(ws); ``` 默認情況下,當`Readable`流的數據讀取完畢,`end`事件觸發后,將自動關閉`Writable`流。如果我們不希望自動關閉`Writable`流,需要傳入參數: ``` readable.pipe(writable, { end: false }); ``` ## 參考源碼 [stream](https://github.com/michaelliao/learn-javascript/tree/master/samples/node/stream)
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看