1. 程式人生 > >node 之 fs流讀寫

node 之 fs流讀寫

encoding html dst 目的 nis 交換 iter 內容 Coding

前面我們已經學習了如何使用fs模塊中的readFile方法、readFileSync方法讀取文件中內容,及如何使用fs模塊中的writeFile方法、writeFileSync方法向一個文件寫入內容。

用readFile方法或readFileSync方法讀取文件內容時,Node.js首將文件內容完整地讀入緩存區,再從該緩存區中讀取文件內容。在使用writeFile方法或writeFileSync方法寫入文件內容時,Node.js首先將該文件內容完整地讀人緩存區,然後一欠性將緩存區中內容寫入到文件中。

無論是read和write都是把文件視為一個整體,也是說,NodeJs需要在內存中開辟與文件相等大小的空間,如果文件小,這的確沒有問題,但是如果是一個非常大的(10G)文件會怎樣?內存根本裝不下。

1.Stream流介紹

應用程序中,是一組有序的、有起點和終點的字節數據的傳輸方式。在應用程序中各種對象之間交換與傳輸數據的時候,總是先將該對象中所包含的數據轉換為各種形式的流數據(即字節數據),再通過流的傳輸,到達目的對象後再將流數據轉換為該對象中可以使用的數據。

流分為輸入流與輸出流

2. Stream流讀取

fs = require(‘fs‘);

var dataContent = ‘‘; //存儲每次讀取的數據
// 設置編碼為 utf8。

//創建輸入流
var readerStream = fs.createReadStream("./a.txt",new Buffer(20));
readerStream.setEncoding(‘UTF8‘);
//註冊讀取數據的事件
readerStream.on("data",function(content){
    dataContent+=content;
    console.log(dataContent);
});

readerStream.on("err",function(err){
    console.error("出現err",err);
})
//讀取數據完畢的事件
readerStream.on("end",function(){
    console.log("讀取完畢");
    console.log(dataContent);
})

 3.stream寫入流

 

var fs = require("fs");

var data = ‘源代碼教育‘;

// 創建一個可以寫入的流,寫入到文件 my.txt 中

var writerStream = fs.createWriteStream(‘my.txt‘);

// 使用 utf8 編碼寫入數據

writerStream.write(data,‘UTF8‘);

// 標記文件末尾

writerStream.end();

// 處理流事件 --> data, end, and error

writerStream.on(‘finish‘, function() {

console.log("寫入完成。");

});

writerStream.on(‘error‘, function(err){

console.log(err.stack);

});

console.log("程序執行完畢");

  

node 之 fs流讀寫