Разница между каналом и потоком в node.js - PullRequest
0 голосов
/ 14 декабря 2018

Вот мой код

const fs = require('fs');
const src = fs.createReadStream('bigfile3.txt');
const des = fs.createWriteStream('newTest.txt');

Я могу использовать либо

src.on('data',(chunk)=>{
des.write(chunk);});

Или

src.pipe(des);

Есть ли разница между этими двумя способами обработки файлаоперация?Метод pipe дает мне ошибку > "size" argument must not be larger than 2147483647 всякий раз, когда я пытаюсь использовать большой файл. (~ 2 ГБ)

Кто-нибудь может объяснить, как работает канал и поток?Спасибо.

1 Ответ

0 голосов
/ 14 декабря 2018

Следует использовать метод канала, поскольку поток данных будет автоматически управляться, чтобы целевой поток записи не был перегружен более быстрым потоком чтения.

Если ваш читаемый поток быстрее, чем записываемый поток, то вы можете испытать потерю данных в методе 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

...