所以我有这个:
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);
});
上面的方法可能有用,尽管我有点担心可能会出现以下这些问题:
在从文件读取的结束事件到将写入流连接到process.stdin所花费的时间之间,可能会丢失数据。
我有一些机会可以复制数据(尽管更有可能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的所有新数据保留在内存中。