国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

node.js中stream流中可讀流和可寫流的實現與使用方法實例分析

2024-05-06 15:44:25
字體:
來源:轉載
供稿:網友

本文實例講述了node.js中stream流中可讀流和可寫流的實現與使用方法。分享給大家供大家參考,具體如下:

node.js中的流 stream 是處理流式數據的抽象接口。node.js 提供了很多流對象,像http中的request和response,和 process.stdout 都是流的實例。

流可以是 可讀的,可寫的,或是可讀可寫的。所有流都是 events 的實例。

一、流的類型

node.js中有四種基本流類型:

1、Writable 可寫流 (例:fs.createWriteStream() )

2、Readable 可讀流 (例:fs.createReadStream() )

3、Duplex 可讀又可寫流 (例:net.Socket )

4、Transform 讀寫過程中可修改或轉換數據的 Duplex 流 (例:zlib.createDeflate() )

二、流中的數據有兩種模式

1、二進制模式,都是 string字符串  和 Buffer。

2、對象模式,流內部處理的是一系統普通對象。

三、可讀流的兩種模式

1、流動模式 ( flowing ) ,數據自動從系統底層讀取,并通過事件,盡可能快地提供給應用程序。

2、暫停模式 ( paused ),必須顯式的調用 read() 讀取數據。

可讀流 都開始于暫停模式,可以通過如下方法切換到流動模式:

1、添加 'data' 事件回調。

2、調用 resume()。

3、調用 pipe()。

可讀流通過如下方法切換回暫停模式:

1、如果沒有管道目標,調用 pause()。

2、如果有管道目標,移除所有管道目標,調用 unpipe() 移除多個管道目標。

四、創建可讀流,并監聽事件

const fs = require('fs');//創建一個文件可讀流let rs = fs.createReadStream('./1.txt', {  //文件系統標志  flags: 'r',  //數據編碼,如果調置了該參數,則讀取的數據會自動解析  //如果沒調置,則讀取的數據會是 Buffer  //也可以通過 rs.setEncoding() 進行設置  encoding: 'utf8',  //文件描述符,默認為null  fd: null,  //文件權限  mode: 0o666,  //文件讀取的開始位置  start: 0,  //文件讀取的結束位置(包括結束位置)  end: Infinity,  //讀取緩沖區的大小,默認64K  highWaterMark: 3});//文件被打開時觸發rs.on('open', function () {  console.log('文件打開');});//監聽data事件,會讓當前流切換到流動模式//當流中將數據傳給消費者后觸發//由于我們在上面配置了 highWaterMark 為 3字節,所以下面會打印多次。rs.on('data', function (data) {  console.log(data);});//流中沒有數據可供消費者時觸發rs.on('end', function () {  console.log('數據讀取完畢');});//讀取數據出錯時觸發rs.on('error', function () {  console.log('讀取錯誤');});//當文件被關閉時觸發rs.on('close', function () {  console.log('文件關閉');});

注意,'open' 和 'close' 事件并不是所有流都會觸發。

當們監聽'data'事件后,系統會盡可能快的讀取出數據。但有時候,我們需要暫停一下流的讀取,操作其他事情。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 卓资县| 长沙县| 紫阳县| 昂仁县| 江孜县| 商南县| 泸水县| 区。| 阿巴嘎旗| 怀安县| 玉屏| 南涧| 东乡族自治县| 万荣县| 韩城市| 远安县| 漳浦县| 岳阳市| 沿河| 珲春市| 冷水江市| 洞头县| 兰州市| 赞皇县| 雅安市| 容城县| 来凤县| 昌都县| 眉山市| 分宜县| 修武县| 诸暨市| 山东| 盈江县| 吴江市| 宁强县| 庄河市| 通榆县| 阿拉善左旗| 扶绥县| 西安市|