Следует использовать метод канала, поскольку поток данных будет автоматически управляться, чтобы целевой поток записи не был перегружен более быстрым потоком чтения.
Если ваш читаемый поток быстрее, чем записываемый поток, то вы можете испытать потерю данных в методе des.write(data)
, поэтому лучше использовать src.pipe(des);
Если размер файла большой, вам следуетиспользовать потоки, это правильный способ, я попробовал подобный пример, как ваш, чтобы скопировать 3,5 ГБ файл с потоками и конвейером, в моем случае это работало безупречно.Убедитесь, что вы делаете что-то не так.
Пример, который я пробовал
'use strict'
const fs =require('fs')
const readStream = fs.createReadStream('./Archive.zip')
const writeStream = fs.createWriteStream('./Archive3.zip')
readStream.pipe(writeStream)
Документы:
https://nodejs.org/api/stream.html#stream_writable_write_chunk_encoding_callback
https://nodejs.org/api/stream.html#stream_readable_pipe_destination_options