Node.js 使用Node';s流式处理数据块,用于假人

Node.js 使用Node';s流式处理数据块,用于假人,node.js,stream,Node.js,Stream,我在Node中查看了fs和streaming的文档,但我发现很难理解/找不到一些关于设置它的简单教程 我有一个非常大的XML文件,它是1.25gb,非常大,但我只需要处理它。以下是我读取较小文件的方式: fs.readFile('./xml/bigxmlfile.xml', function(err,data){ if(err) { console.log("Could not open file " + err); process.exit(1);

我在Node中查看了
fs
streaming
的文档,但我发现很难理解/找不到一些关于设置它的简单教程

我有一个非常大的XML文件,它是1.25gb,非常大,但我只需要处理它。以下是我读取较小文件的方式:

fs.readFile('./xml/bigxmlfile.xml', function(err,data){
    if(err) {
        console.log("Could not open file " + err);
        process.exit(1);
    }

    parseString(data, function (err, result) {
        var json1 = JSON.stringify(result);
        var json = JSON.parse(json1);
        // do some stuff
    });
});
但是,当我尝试对如此大的文件执行此操作时,会出现缓冲区错误。XML结构是:

<?xml version="1.0" encoding="UTF-8"?>
   <merchandiser xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="merchandiser.xsd">   
   <header>
       // Header stuff
   </header>
   <product>
    // Product info
   </product>
   <product>
    // Product info
   </product>
   <product>
    // Product info
   </product>
   // ... to infinity

//标题材料
//产品信息
//产品信息
//产品信息
// ... 无限
fs
文档说要做:
fs.createReadStream('sample.txt',{start:90,end:99})但是…我完全不知道如何使用它,我对流媒体是完全陌生的


我想在每次
fs
访问新的
产品时运行一个函数,如何实现这一点?

您正在使用的调用会收集所有数据(到var数据中)并发送它。你的大文件会引起问题

您需要异步读取文件,并在('data',doSomething())
上为
添加侦听器。您将在那里查找
标记。这可能在SAX风格的解析器中完成。谷歌透露了一个SAXJS项目,可能还有更多

找到这个关于在大型文档上使用sax js的博客,看起来正是您所需要的。 试试这个:

var stream = fs.createReadStream('./xml/bigxmlfile.xml');

stream.on('data', function(chunk){ 
    //do something on file data
});

stream.on('end', function(chunk){
    // file have been read over,do something...
});

想了解更多信息,请阅读这本流手册:,太棒了。

流手册是很好的资源。谢谢。但是
chunk
指的是什么?在上面的问题中,您能否建议一种方法,使
==在数据流中对
产品
进行迭代?例如,当我
控制台.log(chunk)
在您的实例中,我得到
xinfinity.@Jascination这里的
意味着您将文件分成许多部分,它是为
hex