中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Node中的可讀流和可寫流實例代碼分析

發布時間:2023-02-28 09:45:28 來源:億速云 閱讀:130 作者:iii 欄目:web開發

這篇“Node中的可讀流和可寫流實例代碼分析”文章的知識點大部分人都不太理解,所以小編給大家總結了以下內容,內容詳細,步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“Node中的可讀流和可寫流實例代碼分析”文章吧。

stream 也就是流,可以理解為一連串的字節像水流那樣的存在。按照官方文檔的解釋:

A stream is an abstract interface for working with streaming data in Node.js.

流是用于在 Node.js 中處理流數據,也就是連續字節的抽象接口。 

可讀的(Readable)

我們可以通過 fs.createReadStream() 創建一個可讀流 readableStream,第 1 個參數可以是要讀取的文件路徑,比如現有文件 test.txt 內容為:

hello juejin

第 2 個參數(可選)可以傳入一個選項對象,用來控制讀取數據的起止位置等: 

const fs = require('fs')

const readableStream = fs.createReadStream('./test.txt', {
  start: 6,
  end: 11
})

注意,讀取的數據是包括了 startend 的。 在之前介紹 events 模塊時說過,所有的流都是 EventEmitter 的實例。所以獲取數據是通過監聽 'data' 事件:

readableStream.on('data', data => {
  console.log(data)
  console.log(data.toString())
})

打印結果如下,默認是 Buffer 對象,可以通過 toString() 方法轉為字符串:

Node中的可讀流和可寫流實例代碼分析

注意,讀取數據時一次最多讀取 64 * 1024 字節,如果想改變該數值,可以通過 highWaterMark 選項更改。另外還可以使用 pause() 進行暫停操作,使用 resume() 繼續讀取:

const readableStream = fs.createReadStream('./test.txt', {
  start: 6,
  end: 11,
  highWaterMark: 2 // 默認為 64 * 1024
})

readableStream.on('data', data => {
  console.log(data)
  console.log(data.toString())
  readableStream.pause() // 暫停讀取
  setTimeout(() => {
    readableStream.resume() // 恢復讀取
  }, 2000)
})

除了 'data' 事件,可讀流還有其它一些事件,比如監聽文件被打開的 'open'(回調會被傳入 fd 參數),監聽文件讀取到 end(默認為讀取到最后)的 'end',監聽文件關閉的 'close'(文件讀取完會自動關閉):

readableStream.on('data', data => console.log(data))
readableStream.on('open', fd => console.log(`${fd}文件打開了`))
readableStream.on('end', () => console.log('文件讀取到 end 位置了'))
readableStream.on('close', () => console.log('文件已關閉'))

打印結果如下:

Node中的可讀流和可寫流實例代碼分析

可寫的(Writable)

使用 fs.createWriteStream() 可以創建可寫流,第 1 個參數傳入要寫入的文件,第 2 個同樣是用于配置的可選參數,這里我們將 flags 由表示覆蓋寫入的 'w' 改為 'a',即追加寫入(如果還指定了寫入的起始位置 start,則為了兼容 windows 系統, flags 應該寫成 'r+'):

const writableStream = fs.createWriteStream('test.txt', {
  flags: 'a'
})

writableStream.write('養成', err => console.log(`錯誤信息:${err}`)) // 錯誤信息:undefined
writableStream.write('寫作的')
writableStream.end('好習慣')

寫入數據是通過 write 方法,上方代碼執行的結果就是在原本的 "hello juejin" 后添加上了 "養成寫作的好習慣"。最后一次寫入可以使用 end 方法,這樣就能監聽到可寫流的 'close' 事件了:

writableStream.on('close', () => {
  console.log('關閉')
})

否則,可寫流需要手動 writableStream.close() 關閉才能監聽到 'close' 事件。如果寫入成功,則作為 write()/end() 的第 2 個參數傳入的回調的 err 就為 undefined

可讀流還有另外一些事件,比如文件打開時的 'open' 事件,當 close()end() 被調用后文件寫入完成的 'finish' 事件。

可讀流與可寫流的連接

可讀流與可寫流可以通過 pipe 方法進行連接,實現對文件的復制:

const readableStream = fs.createReadStream('./test.txt')
const writableStream = fs.createWriteStream('./copy.txt')

readableStream.pipe(writableStream)

如此,便能將 ./test.txt 內的文本復制到 ./copy.txt 中。

以上就是關于“Node中的可讀流和可寫流實例代碼分析”這篇文章的內容,相信大家都有了一定的了解,希望小編分享的內容對大家有幫助,若想了解更多相關的知識內容,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

额敏县| 阳江市| 浪卡子县| 绥江县| 红原县| 许昌县| 诏安县| 疏勒县| 公安县| 乌什县| 石泉县| 溧阳市| 昌宁县| 建水县| 文化| 平舆县| 石河子市| 苏州市| 马山县| 喜德县| 丽江市| 资中县| 龙川县| 确山县| 龙陵县| 宜章县| 吉水县| 固始县| 吴桥县| 金塔县| 汝阳县| 博野县| 越西县| 扬中市| 抚顺市| 吐鲁番市| 津市市| 航空| 长葛市| 三台县| 古交市|