Stream 數據流

首先必須先要了解Buffer,Buffer是js和c++的結合體,類數組,通常與Stream一起用:

(1).Buffer是個類,因此可以構建成對象
(2).buf具有數組的性質

字符串轉換成二進制:

(1)通常用Buffer來構建二進制

new Buffer(string,[encodding]) 默認是utf-8 //中文一個字是3個字節(jié)
buf對象之間的encodding相互轉換
buf.write(string,[encodding])

(2)buf轉為字符串

buf.toString([encodding])
buf += chunk //這是一種默認的轉換,會將二進制轉為字符串,默認是utf-8
因為buf在轉換成string時,中文是3個字節(jié),如果不是寬字節(jié)編碼時,就會截斷一部分buf,造成亂碼

(3)buffer的拼接(buffer的應用中一般是一段一段的傳輸的),一般用在兩種情況下

(1) var rs = fs.createReadStream()
rs的data事件,是一段一段讀的
rs.on('data',function(chunk){})
(2)網絡請求中,res.on('data',function(chunk){}

拼接中用:

  var rs = fs.createReadStream('./test.txt');
  var chunks = [];
  rs.on('data', function (chunk) {
    chunks.push(chunk);
  });
  rs.on('end', function () {
    var buf = Buffer.concat(chunks);
    var str = buf.toString()
  });

(4)對文件讀取時以及網絡請求的優(yōu)化

(1)網絡中優(yōu)化
node可以將靜態(tài)的文件轉換成二進制的內容,將二進制的內容返回,可將性能大幅度提高.
同時將二進制采用zlib進行壓縮
(2)文件讀取的優(yōu)化
fs.readFile與fs.createReadStream的區(qū)別:
fs.readFile是一次將讀取的內容存到內存中
fs.createReadStream是從磁盤中讀一點,放到內存中,先在內存中準備一段Buffer,然后調用fs.read()讀取時逐步復制到Buffer中.因此調用fs.read()則調用一次磁盤讀取.
fs.createReadStream(path,opts) 其中:highWaterMark設置為64*1024這樣可保證速度

// 創(chuàng)建一個可讀流
var readerStream = fs.createReadStream('input.txt');
// 創(chuàng)建一個可寫流
var writerStream = fs.createWriteStream('output.txt');
// 管道讀寫操作
// 讀取 input.txt 文件內容,并將內容寫入到 output.txt 文件中
readerStream.pipe(writerStream);
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • https://nodejs.org/api/documentation.html 工具模塊 Assert 測試 ...
    KeKeMars閱讀 6,607評論 0 6
  • 模塊化公布自己的模塊功能. 其他模塊調用另外的模塊. 公布方法 如果要輸出一個鍵值對象{},可以利用exports...
    httIsHere閱讀 599評論 0 0
  • ??從JDK1.8開始,由于已經進入到了大數據的時代,所以在類集中也支持有數據的流式分析處理操作,為此就專門提供了...
    江湖非良人閱讀 944評論 0 4
  • 土豆的成長過程,其實也是土豆媽和土豆爸成長的過程。 今天剛才和老土豆吵了一架,確切的說,是他“吵”,我沒有搭話,架...
    Angelica7788閱讀 488評論 0 1
  • (一) 以前對你的喜歡是見你,念你,陪伴你現(xiàn)在對你的喜歡是不問,不看,不叨擾 (二) 愛是一把手中的細沙握得越緊,...
    言靜熙閱讀 1,614評論 30 38

友情鏈接更多精彩內容