NODE(流,跨域)
流
- 特點
- 繼承了事件 (on)
- 流讀取文件是異步的寫法
1》readStream(文件流的讀取)
- 特點
- 不關心文件整體多大,只關心每次讀到的文件
- 讀取文件必須存在
- 默認讀取編碼null(buffer格式的)
- highWaterMark (取值範圍0-65536-》64*1024b)
事件
1.on
- (1)開始rs.on(‘data’,function(){})
rs.on('data',function (data) {//監聽後會不停觸發函數,監聽名字data不能改變 內部會emit(’data‘,xxx) rs.pause();//停止觸發data事件 console.log(data) });
- (2)結束rs.on(‘end’,function(){})
rs.on('end',function () {//讀取完畢事件-》文件完全讀完纔會執行 console.log('game over') });
- (3)pause(暫停data事件)
setInterval(function () { rs.resume();//恢復觸發data事件 },1000);
- (4)resume(恢復觸發data事件)
- (5)on(‘drain’,function(){})
var fs=require('fs'); var rs=fs.createReadStream('./name.txt',{highWaterMark:1}); /*1.監聽事件的觸發,繼承了事件 * 2.開啓水管事件,從非流動模式轉爲流動模式,以最快的速度讀取到內存中*/ rs.on('data',function (data) {emit(’data‘,xxx) rs.pause(); console.log(data) }); /*3.間隔讀取 rs.pause()停止觸發data事件*/ setInterval(function () { rs.resume();//恢復觸發data事件 },1000); //4.on('end')事件 rs.on('end',function () {//讀取完畢事件-》文件完全讀完纔會執行 console.log('game over') });
- 特點
2》writeStream(文件流的寫入)
- 1.特點
- 返回的是可寫流
- 默認寫入的編碼格式是utf8
- highWaterMark
2.寫入位置
(1)write
- 放字符串
- 放buffer
- 異步
- 有返回值(flag:表示是否還能寫入)
flag參數: true:可以繼續寫入,寫在可寫流之內 false:(寫在可寫流之外),東西不會消失
(2)end
- 傳入參數時,會默認調用write方法
- 關閉文件
- 調用值後會將沒寫完的內容全寫完
- 文件關閉之後,不能再寫內容
const fs=require('fs'); //讀的時候64k 寫的時候16k var ws=fs.createWriteStream('./name.txt'); console.log(ws); ws.write('1',function () { console.log('once') }); ws.end('1'); ws.end('eat'); //特點:不能再關閉之後再寫內容
- 1.特點
- 3》pipe管道
function copy(source, target) {
var rs=fs.createReadStream(source);
var ws=fs.createWriteStream(target);
rs.pipe(ws);
}
copy('./name.txt','./age.txt');
- 4》綜合
//1.創建可讀流和可寫流
var fs=require('fs');
var rs=fs.createReadStream('./name.txt',{highWaterMark:4});
var ws=fs.createWriteStream('./name1.txt',{highWaterMark:1});
//2.監聽可讀流的on("data事件”),判斷是否還能寫入,
rs.on('data',function (data) {
/* 方式1
var flag=true;
if (flag){
flag=ws.write('吃飯');
}else{
rs.pause();
}*/
var flag=ws.write(data);
if(!flag){
rs.pause();
}
});
//3.不能寫入調用rs.pause
//4.等待ws.on('drain')方法在裏面恢復讀取rs.resume()
ws.on('drain',function () {
console.log('結束');
rs.resume();
});
//5.等待讀取完畢後rs.on('end'),關閉掉可寫流ws.end();
rs.on('end',function () {
ws.end();
});
//防止淹沒可用內存