Nihai verileri bir diziye sığdırabiliyorsanız, bir dizeye sığdıramaz ve önerildiği gibi bölebilir misiniz? Her durumda, dosyayı bir seferde bir satır işlemek isterseniz, bunun gibi bir şeyi de deneyebilirsiniz:
var fs = require('fs');
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
while (index > -1) {
var line = remaining.substring(0, index);
remaining = remaining.substring(index + 1);
func(line);
index = remaining.indexOf('\n');
}
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
});
}
function func(data) {
console.log('Line: ' + data);
}
var input = fs.createReadStream('lines.txt');
readLines(input, func);
EDIT: ( phopkins tarafından yoruma yanıt olarak ) Bence (en azından yeni sürümlerinde) alt dize veri kopyalamaz ama özel bir SlicedString nesnesi oluşturur (v8 kaynak kodu hızlı bir bakıştan). Her durumda, bahsedilen alt dizeyi önleyen bir değişikliktir (bir dosyada birkaç megabayt değerinde "Tüm iş ve oyun yok, Jack'i sıkıcı bir çocuk yapar"):
function readLines(input, func) {
var remaining = '';
input.on('data', function(data) {
remaining += data;
var index = remaining.indexOf('\n');
var last = 0;
while (index > -1) {
var line = remaining.substring(last, index);
last = index + 1;
func(line);
index = remaining.indexOf('\n', last);
}
remaining = remaining.substring(last);
});
input.on('end', function() {
if (remaining.length > 0) {
func(remaining);
}
});
}