Nodejs中的stream模組

花君發表於2018-04-03

現在簡單說一下,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);複製程式碼



相關文章