0

Я использую функцию fs.createWriteStream(path[, options]) для создания потока записи, разделенного на текстовые строки, каждый из которых заканчивается \n.NodeJS FS Запись для чтения несогласованных данных без переполнения (Решено как Buffer.toString)

Но, когда процесс закончился, если я иду, чтобы проверить поток ЛИТЕР, кажется, поврежден, показывая некоторые (несколько) искаженных линий (например, 0,05% линий выглядит частично вырезанные как переполнение буфера ошибка).

Во всяком случае, если я вырасту внутренний буфер потока от 16k до оГО с возможностью highWaterMark при создании струй, частота ошибок, кажется, изменится, но не исчезает!)

+0

Как это происходит, ошибки сообщаются в kern.log, это может быть связано с ошибкой stat 0x5 BMDMA? Является ли ошибка переноса ввода-вывода в DMA-накопителе на жестком диске, это может быть причиной ошибок в потоке? –

ответ

0

Это из-за ошибки в чтении, не в письменной форме. я делал что-то вроде:

var lines=[], 
line='', 
buf=new Buffer(8192); 

while ((fs.readSync(fd,buf,0,buf.length))!=0) { 
lines = buf.toString().split("\n"); 
lines[0]=line+lines[0]; 
line=lines.pop(); 

, но этот метод вы можете найти здесь и там в Интернете действительно очень неправильно!

Вы должны проверить реальный буфер lengt при преобразовании его в строку, используя buf.toString (null, 0, read_len) !!

var lines=[], 
line='', 
buf=new Buffer(8192), 
read_len; 

while ((read_len=fs.readSync(fd,buf,0,buf.length))!=0) { 
lines = buf.toString(null, 0 ,read_len).split("\n"); 
lines[0]=line+lines[0]; 
line=lines.pop(); 
Смежные вопросы