Node.js NodeJS FS写入读取不一致数据而不溢出(作为Buffer.toString解决)

Node.js NodeJS FS写入读取不一致数据而不溢出(作为Buffer.toString解决),node.js,filesystems,buffer-overflow,file-writing,node.js-stream,Node.js,Filesystems,Buffer Overflow,File Writing,Node.js Stream,我正在使用fs.createWriteStreampath[,options]函数创建一个写入流,该流以文本行分隔,每个文本行以\n结尾 但是,当进程结束时,如果我去检查流leater,它似乎已损坏,显示一些损坏的行,如0.05%的行,看起来部分被剪切,如缓冲区溢出错误 无论如何,如果我在创建streem时使用highWaterMark选项将内部流缓冲区从16k增加到4M,错误率似乎会改变,但不会消失 这是因为阅读错误,而不是写作错误。 我做了一些类似于: var lines=[], line

我正在使用fs.createWriteStreampath[,options]函数创建一个写入流,该流以文本行分隔,每个文本行以\n结尾

但是,当进程结束时,如果我去检查流leater,它似乎已损坏,显示一些损坏的行,如0.05%的行,看起来部分被剪切,如缓冲区溢出错误


无论如何,如果我在创建streem时使用highWaterMark选项将内部流缓冲区从16k增加到4M,错误率似乎会改变,但不会消失

这是因为阅读错误,而不是写作错误。 我做了一些类似于:

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();
但是你在网上到处都能找到的这种方法确实是错误的

当您使用buf.toStringnull,0,read_len


随着进程的进行,kern.log中会报告错误,这可能是由于BMDMA stat 0x5错误造成的?是硬盘驱动器DMA缓冲区I/O传输错误,这可能是流中错误的原因?
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();