如今簡單說一下,nodejs中的stream模塊。html
fs 》fileSystem 文件系統,提供了不少的方法,方法有同步與異步。只不過異步中多了一個callback,裏面的第一參數是錯誤對象。前端
流(stream)在 Node.js 中是處理流數據的抽象接口(abstract interface)。
stream
模塊提供了基礎的 API 。使用這些 API 能夠很容易地來構建實現流接口的對象。nodeNode.js 提供了多種流對象。 例如, HTTP 請求 和
process.stdout
就都是流的實例。api流能夠是可讀的、可寫的,或是可讀寫的。全部的流都是
EventEmitter
的實例。bash
首先了解一下stream模塊的分類異步
在nodejs中,有四種stream類型:
Readable:用來讀取數據,好比 fs.createReadStream()。
Writable:用來寫數據,好比 fs.createWriteStream()。
Duplex:可讀+可寫,好比 net.Socket()。
Transform:在讀寫的過程當中,能夠對數據進行修改,好比 zlib.createDeflate()(數據壓縮/解壓)。複製代碼
簡單讀取的一個txt文件。ui
let fs = require("fs");let path = require("path");
let result = fs.readFileSync(path.join(__dirname,"./1.txt"),'utf8');複製代碼
一、Buffer 的亂碼問題。spa
let buffer = Buffer.from("前端好好");let buff1= buffer.slice(0,5);let buff2= buffer.slice(5);console.log(buff1.toString());console.log(buff2.toString());
這樣會輸出亂碼以下。
前��好好=》解決上面的方法是用了一個模塊
複製代碼
let buffer = Buffer.from("前端好好");let buff1 = buffer.slice(0, 5);let buff2 = buffer.slice(5);
let { StringDecoder } = require('string_decoder');
let sd = new StringDecoder();console.log(sd.write(buff1).toString());console.log(sd.write(buff2).toString());
如今輸出就正常了。
前端好好
複製代碼
ps: 輸出路徑問題code
#!/usr/bin/env node
複製代碼
可讀流:例子以下.把「hello world」寫到1.txt裏面去。
var fs = require('fs');
var content = 'hello world';
var filepath = './1.txt';
fs.writeFile(filepath, content);複製代碼