摘要:中各種用于讀取數據的對象對象描述用于讀取文件代表客戶端請求或服務器端響應代表一個端口對象用于創建子進程的標準輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準輸出流被廢棄用于創建子進程的標準錯誤輸出流。
9. stream流
fs模塊中集中文件讀寫方法的區別
用途 | 使用異步方式 | 使用同步方式 |
---|---|---|
將文件完整讀入緩存區 | readFile | readFileSync |
將文件部分讀入緩存區 | read | readSync |
將數據完整寫入文件 | writeFile | writeFileSync |
將緩存區中的部分內容寫入文件 | write | writeSync |
在使用readFile或者readFileSync讀取文件內容時,Node.js首先將文件內容完整地讀入緩存區,再從緩存區中讀取文件內容。在使用writeFile或者writeFileSync方法寫入文件內容時,Node.js首先將該文件內容讀入緩存區,然后一次性將緩存區中內容寫入到文件中。也就是說,在使用readFile或者readFileSync讀取文件內容或者使用writeFile或者writeFileSync`寫入文件內容時,Node.js會將該文件內容視為一個整體,為其分配緩存區并且一次性將文件內容讀取到緩存區。在這期間,Node.js不再執行任何其他處理。如果使用read或者readSync方法讀取文件內容,Node.js將不斷地將文件中一小塊內容讀入緩存區,最后從緩存區中讀取文件內容,如果使用write或者writeSync寫入文件內,Node.js將實行以下過程:1.將需要書寫的數據書寫到一個內容緩沖區;2. 待緩沖區寫滿后再講該緩沖區中內容寫入到文件中;3. 重復執行過程1和過程2,直到數據全部寫入文件為止。也就是說,如果使用read或者readSync讀取文件內容或者使用write或者writeSync寫入文件,在讀寫文件過程中允許Node.js執行其他操作。
流的概念
在一個應用程序中,流是一組有序的,有起點和終點的字節數據的傳輸手段。在應用程序中各種對象之間交換與傳輸數據的時候,總是先將對象中所包含的數據轉換為各種形式的流數據(字節數據),再通過流的傳輸,到達目的對象后再將流數據轉換為該對象中可以使用的數據。在Node.js中,使用各種實現了stream.Readable接口的對象來講對象數據讀取為流數據,所有這些對象都是繼承了EventEmitter類的實例對象,在讀取數據的過程中,將可能觸發各種事件。
在Node.js中,可以使用flowing模式與非flowing模式來讀取數據,當使用flowing模式時,將使用操作系統的內部I/O機制來讀取數據。這將允許你以最快的速度來讀取數據。當使用非flowing模式時,必須顯式調用對象的read方法來讀取數據。
Node.js中各種用于讀取數據的對象
對象 | 描述 |
---|---|
fs.ReadStream | 用于讀取文件 |
http.IncomingMessage | 代表客戶端請求或服務器端響應 |
net.Socket | 代表一個socket端口對象 |
child.stdout | 用于創建子進程的標準輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準輸出流被廢棄 |
child.stderr | 用于創建子進程的標準錯誤輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準錯誤輸出流被廢棄 |
process.stdin | 用于創建進程的標準輸入流 |
Gzip,Deflate,DeflatRaw | 用于實現數據壓縮 |
fs.createReadStream(path, [options])
options參數
flags: "r",//default,
encoding: "utf8", //base64, ascii, null(default),
autoClose: true(default), //false
start: 使用整數值來指定文件的開始讀取位置
end: 使用整數值來指定文件的結束讀取位置
const fs = require("fs"); let filename = "./one.js" let file = fs.createReadStream(filename, { start: 0, end: 100, encoding: "utf8" }); file.on("open", (fd) => { console.log("open file and start read this file stream.."); }); file.pause(); // 暫停讀取文件流 file.on("data", (data) => { console.log(`讀取到文件內容, ${data}`); }); file.resume(); // 恢復讀取文件流 file.on("end", () => { console.log("文件讀取結束"); }); file.on("close", () => { console.log("文件關閉"); }); file.on("error", (err) => { console.log(`文件讀取錯誤, ${err}`); }); /*** * open file and start read this file stream.. * 讀取到文件內容, hello * 文件讀取結束 * 文件關閉 */9.2 使用WriteStream對象寫入文件
fs.createWriteStream(path, [options])
const fs = require("fs"); let readFilename = "./readFilename.js"; let writeFileName = "./writeFileName.js"; let readFile = fs.createReadStream(readFilename, { start: 0, end: 100, encoding: "utf8" }); let writeFile = fs.createWriteStream(writeFileName); readFile.on("data", (data) => { writeFile.write(data, () => { console.log("write writeFileName.js"); console.log(data); }) }); readFile.on("open", (fd) => { console.log(`open readFilename.js`); }); readFile.on("end", () => { writeFile.end("byebye", () => { console.log("writeFile.js end"); console.log(`${writeFile.bytesWritten}`) }); }); /*** * open readFilename.js * write writeFileName.js * console.log("this is readFilename.js"); * writeFile.js end * 45 */
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/92873.html
摘要:方法也可以接收一個參數表示數據請求著請求的數據大小,但是可讀流可以根據需要忽略這個參數。讀取數據大部分情況下我們只要簡單的使用方法將可讀流的數據重定向到另外形式的流,但是在某些情況下也許直接從可讀流中讀取數據更有用。 介紹本文介紹了使用 node.js streams 開發程序的基本方法。 We should have some ways of connecting programs ...
摘要:當一個客戶端的響應對象是一個可讀流,那么在服務器端這就是一個可寫流。的模塊給我們提供了一個可以操作任何文件的可讀流通過方法創建。創建一個可讀流創建可讀流,我們需要類創建一個可讀流非常簡單。可以通過修改可讀流配置里面的方法實現。 Node.js的stream模塊是有名的應用困難,更別說理解了。那現在可以告訴你,這些都不是問題了。 多年來,開發人員在那里創建了大量的軟件包,其唯一目的就是使...
摘要:端輸入數據到端,對就是輸入流,得到的對象就是可讀流對就是輸出端得到的對象是可寫流。在中,這四種流都是的實例,它們都有事件,可讀流具有監聽數據到來的事件等,可寫流則具有監聽數據已傳給低層系統的事件等,和都同時實現了和的事件和接口。 原文地址在我的博客 node中的Buffer和Stream會給剛接觸Node的前端工程師們帶來困惑,原因是前端并沒有類似概念(or 有我們也沒意識到)。然而,...
摘要:在可讀流事件里我們就必須調用方法。當一個對象就意味著我們想發出信號這個流沒有更多數據了自定義可寫流為了實現可寫流,我們需要使用流模塊中的構造函數。我們只需給構造函數傳遞一些選項并創建一個對象。 前言 什么是流呢?看字面意思,我們可能會想起生活中的水流,電流。但是流不是水也不是電,它只是描述水和電的流動;所以說流是抽象的。在node.js中流是一個抽象接口,它不關心文件內容,只關注是否從...
摘要:前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點分為新聞熱點開發教程工程實踐深度閱讀開源項目巔峰人生等欄目。對該漏洞的綜合評級為高危。目前,相關利用方式已經在互聯網上公開,近期出現攻擊嘗試爆發的可能。 前端每周清單專注前端領域內容,以對外文資料的搜集為主,幫助開發者了解一周前端熱點;分為新聞熱點、開發教程、工程實踐、深度閱讀、開源項目、巔峰人生等欄目。歡...
閱讀 6912·2021-09-22 15:08
閱讀 1920·2021-08-24 10:03
閱讀 2437·2021-08-20 09:36
閱讀 1315·2020-12-03 17:22
閱讀 2474·2019-08-30 15:55
閱讀 905·2019-08-29 16:13
閱讀 3053·2019-08-29 12:41
閱讀 3249·2019-08-26 12:12