成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Node.js學習之路08——fs文件系統(tǒng)之stream流的基本介紹

BoYang / 1133人閱讀

摘要:中各種用于讀取數(shù)據(jù)的對象對象描述用于讀取文件代表客戶端請求或服務器端響應代表一個端口對象用于創(chuàng)建子進程的標準輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準輸出流被廢棄用于創(chuàng)建子進程的標準錯誤輸出流。

9. stream

fs模塊中集中文件讀寫方法的區(qū)別

用途 使用異步方式 使用同步方式
將文件完整讀入緩存區(qū) readFile readFileSync
將文件部分讀入緩存區(qū) read readSync
將數(shù)據(jù)完整寫入文件 writeFile writeFileSync
將緩存區(qū)中的部分內(nèi)容寫入文件 write writeSync
在使用readFile或者readFileSync讀取文件內(nèi)容時,Node.js首先將文件內(nèi)容完整地讀入緩存區(qū),再從緩存區(qū)中讀取文件內(nèi)容。在使用writeFile或者writeFileSync方法寫入文件內(nèi)容時,Node.js首先將該文件內(nèi)容讀入緩存區(qū),然后一次性將緩存區(qū)中內(nèi)容寫入到文件中。也就是說,在使用readFile或者readFileSync讀取文件內(nèi)容或者使用writeFile或者writeFileSync`寫入文件內(nèi)容時,Node.js會將該文件內(nèi)容視為一個整體,為其分配緩存區(qū)并且一次性將文件內(nèi)容讀取到緩存區(qū)。在這期間,Node.js不再執(zhí)行任何其他處理。

如果使用read或者readSync方法讀取文件內(nèi)容,Node.js將不斷地將文件中一小塊內(nèi)容讀入緩存區(qū),最后從緩存區(qū)中讀取文件內(nèi)容,如果使用write或者writeSync寫入文件內(nèi),Node.js將實行以下過程:1.將需要書寫的數(shù)據(jù)書寫到一個內(nèi)容緩沖區(qū);2. 待緩沖區(qū)寫滿后再講該緩沖區(qū)中內(nèi)容寫入到文件中;3. 重復執(zhí)行過程1和過程2,直到數(shù)據(jù)全部寫入文件為止。也就是說,如果使用read或者readSync讀取文件內(nèi)容或者使用write或者writeSync寫入文件,在讀寫文件過程中允許Node.js執(zhí)行其他操作。

的概念

在一個應用程序中,流是一組有序的,有起點和終點的字節(jié)數(shù)據(jù)的傳輸手段。在應用程序中各種對象之間交換與傳輸數(shù)據(jù)的時候,總是先將對象中所包含的數(shù)據(jù)轉(zhuǎn)換為各種形式的流數(shù)據(jù)(字節(jié)數(shù)據(jù)),再通過流的傳輸,到達目的對象后再將流數(shù)據(jù)轉(zhuǎn)換為該對象中可以使用的數(shù)據(jù)。

在Node.js中,使用各種實現(xiàn)了stream.Readable接口的對象來講對象數(shù)據(jù)讀取為流數(shù)據(jù),所有這些對象都是繼承了EventEmitter類的實例對象,在讀取數(shù)據(jù)的過程中,將可能觸發(fā)各種事件。

在Node.js中,可以使用flowing模式與非flowing模式來讀取數(shù)據(jù),當使用flowing模式時,將使用操作系統(tǒng)的內(nèi)部I/O機制來讀取數(shù)據(jù)。這將允許你以最快的速度來讀取數(shù)據(jù)。當使用非flowing模式時,必須顯式調(diào)用對象的read方法來讀取數(shù)據(jù)。

Node.js中各種用于讀取數(shù)據(jù)的對象

對象 描述
fs.ReadStream 用于讀取文件
http.IncomingMessage 代表客戶端請求或服務器端響應
net.Socket 代表一個socket端口對象
child.stdout 用于創(chuàng)建子進程的標準輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準輸出流被廢棄
child.stderr 用于創(chuàng)建子進程的標準錯誤輸出流。如果子進程和父進程共享輸入輸出流,則子進程的標準錯誤輸出流被廢棄
process.stdin 用于創(chuàng)建進程的標準輸入流
Gzip,Deflate,DeflatRaw 用于實現(xiàn)數(shù)據(jù)壓縮
9.1 使用ReadStream對象讀取文件

fs.createReadStream(path, [options])

options參數(shù)

flags: "r",//default,

encoding: "utf8", //base64, ascii, null(default),

autoClose: true(default), //false

start: 使用整數(shù)值來指定文件的開始讀取位置

end: 使用整數(shù)值來指定文件的結(jié)束讀取位置

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(`讀取到文件內(nèi)容, ${data}`);
});

file.resume(); // 恢復讀取文件流

file.on("end", () => {
    console.log("文件讀取結(jié)束");
});

file.on("close", () => {
    console.log("文件關閉");
});

file.on("error", (err) => {
    console.log(`文件讀取錯誤, ${err}`);
});
/***
 * open file and start read this file stream..
 * 讀取到文件內(nèi)容, hello
 * 文件讀取結(jié)束
 * 文件關閉
 */
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 
 */

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/92873.html

相關文章

  • [轉(zhuǎn)]nodejs Stream使用手冊

    摘要:方法也可以接收一個參數(shù)表示數(shù)據(jù)請求著請求的數(shù)據(jù)大小,但是可讀流可以根據(jù)需要忽略這個參數(shù)。讀取數(shù)據(jù)大部分情況下我們只要簡單的使用方法將可讀流的數(shù)據(jù)重定向到另外形式的流,但是在某些情況下也許直接從可讀流中讀取數(shù)據(jù)更有用。 介紹本文介紹了使用 node.js streams 開發(fā)程序的基本方法。 We should have some ways of connecting programs ...

    luffyZh 評論0 收藏0
  • [譯]關于Node.js streams你需要知道的一切

    摘要:當一個客戶端的響應對象是一個可讀流,那么在服務器端這就是一個可寫流。的模塊給我們提供了一個可以操作任何文件的可讀流通過方法創(chuàng)建。創(chuàng)建一個可讀流創(chuàng)建可讀流,我們需要類創(chuàng)建一個可讀流非常簡單。可以通過修改可讀流配置里面的方法實現(xiàn)。 Node.js的stream模塊是有名的應用困難,更別說理解了。那現(xiàn)在可以告訴你,這些都不是問題了。 多年來,開發(fā)人員在那里創(chuàng)建了大量的軟件包,其唯一目的就是使...

    bang590 評論0 收藏0
  • 認識node核心模塊--從Buffer、Streamfs

    摘要:端輸入數(shù)據(jù)到端,對就是輸入流,得到的對象就是可讀流對就是輸出端得到的對象是可寫流。在中,這四種流都是的實例,它們都有事件,可讀流具有監(jiān)聽數(shù)據(jù)到來的事件等,可寫流則具有監(jiān)聽數(shù)據(jù)已傳給低層系統(tǒng)的事件等,和都同時實現(xiàn)了和的事件和接口。 原文地址在我的博客 node中的Buffer和Stream會給剛接觸Node的前端工程師們帶來困惑,原因是前端并沒有類似概念(or 有我們也沒意識到)。然而,...

    TANKING 評論0 收藏0
  • 淺談node.js中的stream(流)

    摘要:在可讀流事件里我們就必須調(diào)用方法。當一個對象就意味著我們想發(fā)出信號這個流沒有更多數(shù)據(jù)了自定義可寫流為了實現(xiàn)可寫流,我們需要使用流模塊中的構(gòu)造函數(shù)。我們只需給構(gòu)造函數(shù)傳遞一些選項并創(chuàng)建一個對象。 前言 什么是流呢?看字面意思,我們可能會想起生活中的水流,電流。但是流不是水也不是電,它只是描述水和電的流動;所以說流是抽象的。在node.js中流是一個抽象接口,它不關心文件內(nèi)容,只關注是否從...

    elliott_hu 評論0 收藏0
  • 前端每周清單半年盤點 Node.js

    摘要:前端每周清單專注前端領域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點分為新聞熱點開發(fā)教程工程實踐深度閱讀開源項目巔峰人生等欄目。對該漏洞的綜合評級為高危。目前,相關利用方式已經(jīng)在互聯(lián)網(wǎng)上公開,近期出現(xiàn)攻擊嘗試爆發(fā)的可能。 前端每周清單專注前端領域內(nèi)容,以對外文資料的搜集為主,幫助開發(fā)者了解一周前端熱點;分為新聞熱點、開發(fā)教程、工程實踐、深度閱讀、開源項目、巔峰人生等欄目。歡...

    kid143 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<