NODE(流,跨域)

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'); //特點:不能再關閉之後再寫內容
  • 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();
});
//防止淹沒可用內存

HTTP

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章