Я боролся и долго искал. Я знаю, что есть ответы на этот счет, но ни один не работает.
Для этого я использовал fs.createReadStream и readLine. Но он использует fs.close (), чтобы закрыть чтение файла. поэтому он не работает вообще при использовании в буфере. Чтение всех файлов продолжается без возможности его прервать ...
Тогда я использовал это:
const stream = require('stream');
let bufferStream = new stream.PassThrough();
bufferStream.end(hexaviaFile.buffer);
bufferStream
.pipe(require('split')())
.pipe(es.mapSync(function(line){
// pause the readstream
bufferStream.pause();
// DO WHATEVER WITH YOUR LINE
console.log('line content = ' + line);
// resume the readstream, possibly from a callback
bufferStream.resume();
}).on('error', function(err){
console.log('Error while reading file.' + err);
}).on('end', function(){
console.log('end event !');
}).on('close', function(){
console.log('close event !');
})
);
// toString() Failed
Я получаю ошибку [toString () Failed] и искал ее, по-видимому, она появляется, когда буфер больше, чем максимальный размер буфера узла.
Итак, я проверил:
var buffer = require('buffer');
console.log('buffer.kMaxLength = ', buffer.kMaxLength); // 2147483647
console.log('hexaviaFile.buffer.byteLength = ', hexaviaFile.buffer.byteLength); // => 413567671
Это не тот случай, так как вы видите цифры:
* maxBuffer size = 2Go
* мой буфер = 0,4Go
Я также попытался сделать это с помощью другой библиотеки, но:
1. Я хочу, чтобы использование памяти было как можно ниже
2. Мне нужно, чтобы это чтение было идеально синхронизировано. Другими словами, у меня есть некоторые обработки после чтения файла, и мне нужно завершить все чтение, прежде чем перейти к следующим шагам.
Я не знаю, что делать :) Любая помощь приветствуется
Привет.