Я столкнулся с неожиданным поведением в отношении fs.createReadStream
и fs.createWriteStream
. Я надеюсь, что кто-то может указать, где я делаю неправильные предположения:Неожиданное поведение считываемых и перезаписываемых потоков
создать для чтения и записи потока, как этот
let readableStream = fs.createReadStream('./lorem ipsum.doc');
let writableStream = fs.createWriteStream('./output');
Почему, если я посылаю поток чтения в поток записи как этот
let data, chunk;
readableStream
.on('readable',() => {
while ((chunk=stream.read()) !== null) {
data+=chunk;
}
})
.on('end',()=>{
writableStream.write(data)
console.log("done");
});
Я в конечном итоге с несовпадения в выходном файле:
в то время как, если я поток, как это:
let data, chunk;
readableStream
.on('readable',() => {
while ((chunk=stream.read()) !== null) {
writableStream.write(chunk)
}
})
.on('end',()=>{
console.log("done");
});
все хорошо, и, как и ожидалось:
Т.е., в первом примере, когда/где есть дополнительные накладные расходы в байтах добавлено? Почему он добавлен? Что пошло не так?
Спасибо, что просветили меня!
Примечание: Я знаю, используя pipe
(который дает мне правильный выходной файл), но эти примеры предназначены только для моего понимания.
Да, вы правы. Если я делаю 'let data = Buffer.from ([]);', а затем используйте 'data = Buffer.concat ([data, chunk]);', файл выходит правильно. Глупый из меня, я не понимал, что перехожу к струнному типу. –
Или на самом деле, что javascript преобразовывал в строковый тип ... :) –