[Node.js] 串流(stream)應用 – 建立可寫(writable)串流

此篇文章將介紹使用串流模組中的可寫(writable)串流,即 fs.createWriteStream() 方法,將資料寫入檔案。

使用可寫(writable)串流,將資料寫入檔案

var fs = require('fs'); // 引入檔案系統模組
var ws = fs.createWriteStream('data/writable.txt'); // 建立可寫(Writable)串流

ws.write('stream - '); // 寫入資料
ws.write('writable - ');
ws.write('file - ');

// 設定 1000 毫秒後,自行關閉檔案串流,並在結尾再放入資料:"end."即斷行符號。
setTimeout(function(){
  ws.end('end.\n');
}, 1000);

write 語法:
writable.write(chunk[, encoding[, callback]]);

檔案(data/writable.txt)最後的結果(原檔案裡若有內容的話,會被清空):
stream – writable – file – end.

使用可寫(writable)串流的 drain 事件處理

var fs = require('fs'); // 引入檔案系統模組
var rs = fs.createReadStream('data/srcDrain.mp3');
var ws = fs.createWriteStream('data/destDrain.mp3'); // 建立可寫(Writable)串流
rs.setEncoding('utf8');

rs.on('data', function(chunk){
  console.log('串流:接收到資料(data)');
  if(ws.write(chunk) === false){
    console.log('資料寫入暫存');
    rs.pause(); // 暫停可讀(Readable)串流,並觸發可寫(writable)串流的 drain 事件
  }
});

ws.on('drain', function(){
  console.log('drain event emitted.');
  rs.resume(); // 恢復可讀(Readable)串流
});

// 在可寫(writable)串流使用 ws.end() 方法後,並且所有資料已被寫入到底層系統後,該事件會被觸發。
ws.on('finish', function(){
  console.log('finish event emitted.');
});

rs.on('end', function(){
  console.log('串流:結束(end)');
  ws.end();
});

您可在此處留言

搶先留言!

Notify of
avatar
wpDiscuz