Потоковая передача больших статических файлов с использованием NodeJS

Мне нужно периодически использовать большие неформатированные текстовые файлы только для чтения и проверять наличие определенного содержимого/слов в каждом из этих файлов. Этот файл состоит из всех буквенно-цифровых символов. Однако у меня возникают проблемы даже с чтением в end потока для одного из этих больших статических файлов.

Ниже приведена копия самого простого кода, который я пытался запустить после того, как заметил, что он не достигает end, и это по-прежнему не вызывает событие end. Я вижу много итераций/фрагментов чтения data, но никогда не запускаются все данные для файла и end.

function readFile(file) {
    const readStream = fs.createReadStream(file, {
      fd: null,
      flags: 'r',
      encoding: 'utf-8',
      allowVolatile: true,
      highWaterMark: staticHighWaterMark,
    });

    readStream.on('data', (chunk) => {
      console.log('DATA chunk', chunk.length);
    });

    readStream.on('end', () => {
      console.log('END file');
    }); 
}

Это настолько просто, что я начинаю задаваться вопросом, не связано ли это с моей средой, но если в простой логике выше для чтения потока есть что-то, что определено как проблема, пожалуйста, дайте мне знать.

ПРИМЕЧАНИЕ. Если я продолжаю увеличивать параметр highWaterMark, он проходит дальше по файлу, но все еще не достигает end файла. Однако это не должно иметь значения для достижения или недостижения конца файла, а вместо этого должно контролировать, сколько данных он считывает на «фрагмент».


person user376327    schedule 07.07.2017    source источник
comment
Из любопытства. Вы хотите прочитать его построчно?   -  person Diego ZoracKy    schedule 07.07.2017
comment
Это не обязательно должно быть так, но я думаю, что это может быть, что сегодня поддерживается API-интерфейсом nodejs. Как вы думаете, будет ли это иметь значение для возможности доступа к end файла?   -  person user376327    schedule 07.07.2017
comment
Я просто предлагаю вам вместо этого использовать readline (nodejs.org /dist/latest-v6.x/docs/api/readline.html). Мне любопытна твоя проблема. Я собираюсь опубликовать код для проверки, хорошо?   -  person Diego ZoracKy    schedule 07.07.2017
comment
Вы уверены, что ваша среда не отключает вывод после определенного количества строк? Я знаю, что intellij IDEA не будет отображать вывод после вывода определенного количества строк. Что вы можете сделать, чтобы проверить это, так это направить поток в доступный для записи (файловый) поток и посмотреть, все ли записано. Я не вижу причин, по которым этого не должно быть. Кроме того, просто взглянув на документы, нет варианта allowVolatile   -  person smac89    schedule 24.07.2017


Ответы (1)


Можете ли вы проверить это и посмотреть, сможете ли вы с этим прочитать весь файл?

function readFileV2(file) {
    const readStream = fs.createReadStream(file, {
      fd: null,
      flags: 'r',
      encoding: 'utf-8',
      allowVolatile: true,
      highWaterMark: staticHighWaterMark,
    });

    readStream.pipe(process.stdout);
}
person Diego ZoracKy    schedule 07.07.2017