преобразование файла по одному символу за раз с использованием nodejs потоков - PullRequest
0 голосов
/ 19 января 2020

Я пытаюсь преобразовать файл символьно-символьно (как чанки), и во время этого преобразования некоторые внутренние состояния могут состоять из этих предоставленных чанков.

Я реализовал это, используя читаемый файловый поток с 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 ().

Так что есть риск, что я получу более одного символа в некоторых чанках, которые будут преобразованы ? если да, как я могу быть уверен, что получу только один за раз?

...