第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

NodeJS:如何從兩個(gè)文件中讀取并使用管道寫(xiě)入單個(gè)輸出文件?

NodeJS:如何從兩個(gè)文件中讀取并使用管道寫(xiě)入單個(gè)輸出文件?

斯蒂芬大帝 2022-11-11 15:06:23
語(yǔ)境我正在使用事件流模塊來(lái)幫助我讀取和寫(xiě)入這些我希望返回結(jié)果文件的本地文件。長(zhǎng)話(huà)短說(shuō),multipart/form-data我期望的 2 個(gè)輸入文件(通過(guò) express API as 發(fā)送)的大小可以超過(guò) 200MB,其中包含一個(gè)條目列表(每行 1 個(gè))。我想做的是以以下格式組合這些條目,<entry1>:<entry2>其中entry1第一個(gè)文件中的條目和entry2來(lái)自第二個(gè)文件。我之前以一種能夠在內(nèi)存中存儲(chǔ)和返回輸入/輸出的方式執(zhí)行此操作,但是由于我的應(yīng)用程序服務(wù)器上的內(nèi)存空間非常有限,我的堆內(nèi)存不足。我讀到我可以使用事件流和管道逐行讀取每個(gè)文件并輸出到文件,而不是使用讀取流輸出到內(nèi)存中的大字符串。問(wèn)題是我似乎無(wú)法以正確的方式/時(shí)間解決問(wèn)題,以便準(zhǔn)備好將生成的輸出文件發(fā)送回調(diào)用者。到目前為止我所擁有的到目前為止,我所做的工作是我得到了我期望的正確文件輸出,但是,這似乎是一個(gè)異步問(wèn)題,因?yàn)槲以谖募?shí)際完成寫(xiě)入/保存之前解決了承諾。請(qǐng)?jiān)谙旅娌榭次业拇a...const fs = require('fs');const es = require('event-stream');const uuid = require('uuid');const buildFile = async (fileOne, fileTwo) =>    await new Promise((resolve, reject) => {        try {            // Output stream            let fileID = uuid.v4();            let outStream = fs                .createWriteStream(`files/outputFile-${fileID}.txt`, {                    flags    : 'a',                    encoding : 'utf-8'                });            let fileOneRS = fs                .createReadStream(fileOne.path, {                    flags    : 'r',                    encoding : 'utf-8'                })                .pipe(es.split())                .pipe(                    es.mapSync((lineOne) => {                        fileOneRS.pause();                        let fileTwoRS = fs                            .createReadStream(fileTwo.path, {                                flags    : 'r',                                encoding : 'utf-8'                            })              作為一個(gè)新手 Javascript 開(kāi)發(fā)人員,甚至是 NodeJS 的新手,我已經(jīng)堅(jiān)持嘗試自己解決這個(gè)問(wèn)題超過(guò) 2 周了。如果有人能夠提供幫助,我將非常感謝這里的一些智慧!
查看完整描述

1 回答

?
鳳凰求蠱

TA貢獻(xiàn)1825條經(jīng)驗(yàn) 獲得超4個(gè)贊

編輯:更新代碼以符合 OP 的預(yù)期輸出。


resolve()寫(xiě)入流完成后,應(yīng)調(diào)用promise函數(shù)。OP 片段中提供的注釋表明 resolve 函數(shù)可能在排空時(shí)被調(diào)用fileOneRS(在 pipe() 鏈的末尾)。


而不是為第一個(gè)文件中的每一行創(chuàng)建一個(gè)新的讀取流,代碼應(yīng)該只實(shí)例化一次讀取流。


以下示例說(shuō)明了如何將此代碼流重構(gòu)為僅讀取每行一次,并逐行連接文件 A 和 B 中的行:


import stream from "stream";

import util from "util";

import readline from "readline";

import fs from "fs";

import os from "os";


/** Returns a readable stream as an async iterable over text lines */

function lineIteratorFromFile( fileStream ){

  return readline.createInterface({

    input: fileStream,

    crlfDelay: Infinity

  })

}


// Use stream.pipeline to handle errors and to stream the combined output

// to a Writable stream. The promise will resolve once the data has finished

// writing to the output stream.

await util

  .promisify(stream.pipeline)(

    async function*(){

      for await ( const lineA of lineIteratorFromFile(fs.createReadStream( "./in1.txt" ))){

        for await (const lineB of lineIteratorFromFile(fs.createReadStream( "./in2.txt" ))){

          yield `${lineA}: ${lineB}${os.EOL}`

        }

      }

    },

    fs.createWriteStream( outputFile )

  );

NodeJS v13+ 的可運(yùn)行示例可在下面的折疊片段中找到:

// in1.txt:

foo1

foo2


// in2.txt:

bar1

bar2


// out.txt (the file created by this script, with expected output):

foo1: bar1

foo1: bar2

foo2: bar1

foo2: bar2


// main.mjs:

import stream from "stream";

import util from "util";

import readline from "readline";

import fs from "fs";

import os from "os";


/** Returns a readable stream as an async iterable over text lines */

function lineIteratorFromFile( fileStream ){

  return readline.createInterface({

input: fileStream,

crlfDelay: Infinity

  })

}


(async ()=>{

  await util

.promisify(stream.pipeline)(

  async function*(){

    for await ( const lineA of lineIteratorFromFile(fs.createReadStream( "./in1.txt" ))){

      for await (const lineB of lineIteratorFromFile(fs.createReadStream( "./in2.txt" ))){

        yield `${lineA}: ${lineB}${os.EOL}`

      }

    }

  },

  fs.createWriteStream( "./out.txt" )

);

})()

  .catch(console.error);


查看完整回答
反對(duì) 回復(fù) 2022-11-11
  • 1 回答
  • 0 關(guān)注
  • 115 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)