現在簡單說一下,nodejs中的stream模組。
fs 》fileSystem 檔案系統,提供了很多的方法,方法有同步與非同步。只不過非同步中多了一個callback,裡面的第一引數是錯誤物件。
流(stream)在 Node.js 中是處理流資料的抽象介面(abstract interface)。
stream
模組提供了基礎的 API 。使用這些 API 可以很容易地來構建實現流介面的物件。Node.js 提供了多種流物件。 例如, HTTP 請求 和
process.stdout
就都是流的例項。流可以是可讀的、可寫的,或是可讀寫的。所有的流都是
EventEmitter
的例項。
首先了解一下stream模組的分類
在nodejs中,有四種stream型別:
Readable:用來讀取資料,比如 fs.createReadStream()。
Writable:用來寫資料,比如 fs.createWriteStream()。
Duplex:可讀+可寫,比如 net.Socket()。
Transform:在讀寫的過程中,可以對資料進行修改,比如 zlib.createDeflate()(資料壓縮/解壓)。複製程式碼
簡單讀取的一個txt檔案。
let fs = require("fs");let path = require("path");
let result = fs.readFileSync(path.join(__dirname,"./1.txt"),'utf8');複製程式碼
1、Buffer 的亂碼問題。
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: 輸出路徑問題
#!/usr/bin/env node
複製程式碼
可讀流:例子如下.把“hello world”寫到1.txt裡面去。
var fs = require('fs');
var content = 'hello world';
var filepath = './1.txt';
fs.writeFile(filepath, content);複製程式碼