Итак, у меня есть именно это:
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 в памяти, пока я жду, пока все данные из файла будут прочитаны.