Node.js 使用Node';s流式处理数据块,用于假人
我在Node中查看了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);
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