Nếu bạn có thể điều chỉnh dữ liệu cuối cùng thành một mảng thì bạn cũng không thể điều chỉnh nó trong một chuỗi và phân tách nó, như đã được đề xuất? Trong mọi trường hợp nếu bạn muốn xử lý tệp một dòng tại một thời điểm, bạn cũng có thể thử một cái gì đó như thế này:
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: (để phản hồi nhận xét của phopkins ) Tôi nghĩ (ít nhất là trong các phiên bản mới hơn) chuỗi con không sao chép dữ liệu mà tạo ra một đối tượng DiledString đặc biệt (từ cái nhìn nhanh vào mã nguồn v8). Trong mọi trường hợp, đây là một sửa đổi để tránh chuỗi con được đề cập (được thử nghiệm trên một tệp có giá trị vài megabyte "Tất cả công việc và không chơi khiến Jack trở thành một cậu bé ngớ ngẩn"):
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);
}
});
}