Я пытаюсь преобразовать файл символьно-символьно (как чанки), и во время этого преобразования некоторые внутренние состояния могут состоять из этих предоставленных чанков.
Я реализовал это, используя читаемый файловый поток с highWaterMark, равным 1, затем направляет его через поток преобразования, который передает преобразованный результат в целевой файл. Ниже приведен мой код:
const fs = require("fs");
const Transform = require("stream").Transform;
const src = "the path of the source file";
const target = "the target path of the resulting file";
// make sure that the directory of `target` exists
ensureDir(target);
const targetStream = fs.createWriteStream(target);
const srcStream = fs.createReadStream(src, { highWaterMark: 1 });
const transformStream = new Transform({
transform(chunk, encoding, callback) {
// do some transformation and call `this.push` or maby not
callback();
},
flush(callback) {
// flush the leftover internal state
callback();
}
});
srcStream.pipe(transformStream).pipe(targetStream);
Но, как mscdex заявляет:
highWaterMark - это просто индикатор, указывающий на то, что больше не нужно записывать данные / втягивания. Очевидно, что вы можете записать больше данных, и они будут продолжать буферизироваться в памяти. highWaterMark не определяет размер чанков, передаваемых _transform () / _ write ().
Так что есть риск, что я получу более одного символа в некоторых чанках, которые будут преобразованы ? если да, как я могу быть уверен, что получу только один за раз?