1. 程式人生 > >node.js中檔案的流模式操作

node.js中檔案的流模式操作

一般我們處理資料有兩種模式, 一種是buffer模式, 一種是stream模式, buffer模式就是取完資料一次性操作, stream模式就是邊取資料邊操作.
舉個例子, 如果開啟一個2G的檔案, 用buffer模式就是先分配2G的記憶體, 把檔案全部讀出來, 然後開始操作記憶體, 而用流模式的方法就是邊讀資料, 邊開始處理.

從這裡看出stream模式無論是在空間和時間上都優於buffer模式:
在空間上, 記憶體只會佔用當前需要處理的一塊資料區域的大小, 而不是整個檔案.
在時間上, 因為不需要全部的資料就可以開始處理, 時間就相當於節約了, 從序列變成了並行操作(這裡的並行不是多執行緒的並行, 而是生產者和消費者並行).



var fs = require("fs");
/*
    讀取檔案的狀態;
    fs.stat(path,callback);
    callback有兩個引數;err,stats;stats是一個fs.Stats物件;
    如果發生錯誤err.code是常見錯誤之一;
 不建議在呼叫 fs.open() 、fs.readFile() 或 fs.writeFile() 之前使用 fs.stat() 檢查一個檔案是否存在。 作為替代,使用者程式碼應該直接開啟/讀取/寫入檔案,當檔案無效時再處理錯誤。
 如果要檢查一個檔案是否存在且不操作它,推薦使用 fs.access()。
 */

/**
 * Created by SlzStar on 2017/9/18.
 */
//檔案的流式操作;
var fs = require("fs");
//檔案的流式讀模式;建立可讀流
var rs = fs.createReadStream("./W3CSchool.chm");
//定義空字串,接收傳遞的資料;
var data = "";
//讀取事件;
rs.on("data",function(drunk){
    console.log(drunk);
    data += drunk;
})
//讀取完畢事件;
rs.on("end",function(){
    console.log("已經讀取完畢了");
})
//監聽錯誤事件;
rs.on("error",function(err){
    console.log("監聽失敗,錯誤事件---"+ err)
})


//檔案的流式寫入模式; 建立可寫流;
var ws = fs.createWriteStream("./wenjian.txt");
ws.write("寫入的檔案內容");//會覆蓋檔案原本的內容;
//進行寫入資料,傳輸完畢;
ws.on("finish",function(){
    console.log("傳輸完畢");
})
//監聽錯誤資訊;
ws.on("error",function(err){
    console.log("發生錯誤資訊"+err)
})


ws.end(); //必須有手動標記寫入結束;