将fs.createReadStream与process.stdin流结合

时间:2019-07-09 05:33:23

标签: node.js stream rxjs5 rxjs6 nodejs-stream

所以我有这个:

process.stdin.resume().pipe(fs.createWriteStream('file'));

后来我想读取文件中当前的内容,但我也想从stdin中流式传输新数据:

const sws = new SomeWriteStream({end:false});

fs.createReadStream('file').pipe(sws).once('finish', () => {
  process.stdin.pipe(sws);
});

上面的方法可能有用,尽管我有点担心可能会出现以下这些问题

  1. 在从文件读取的结束事件到将写入流连接到process.stdin所花费的时间之间,可能会丢失数据。

  2. 我有一些机会可以复制数据(尽管更有可能1)。

也许有某种方法可以使用RxJS来做到这一点吗?基本上,我想“组合”流,但是来自stdin的数据必须位于文件中之后。

一种实现方法可能是这样的:

const ins = process.stdin.resume().pipe(fs.createWriteStream('file'));
const sws = new SomeWriteStream({end:false});

const w = combine(
     fs.createReadStream('file', {start:0, end: ins.bytesWritten}),
     process.stdin
  ).pipe(sws)

w.on('data', d => {});

但是该合并功能仅需要在文件流中的所有数据为空之后将process.stdin数据写入sws。不知道如何编写合并功能,或者不确定RxJS中是否存在类似的功能。

就性能而言,第一种技术可能会更好,否则,当我等待读取文件中的所有数据时,必须将来自process.stdin的所有新数据保留在内存中。

0 个答案:

没有答案