我有一个相当大的XML文件,我正在将其流式传输到一个函数,如下所示:
var stream = fs.createReadStream(__dirname + '/File.xml').pipe(myfunction);
要流式传输到的函数的内容其实并不重要,只是它涉及到将流拆分为我想要的字符串,并在这些字符串上运行decodeURIComponent
。我遇到的问题是,一些块在编码字符串的中途结束:
01 %E5%8A%87%E4%BC%B4%E7%89%%9E%8B1%E2%98%86%E6%A5%B5%E2%98%85%E6.csv
02 %E3%83%AA%E3%82%B9%E3%82%BC%B7%E5%8C%96%E5%9E%8B2%E2%98%86%E6.csv
03 %E6%97%A5%E5%8B3%E2%98%86%E6%A5%B5%E2%98%85%E6%9C%8D.csv
04 %E6%9C%8D%E7%9D%B1%9A%E5%9E%8B4%E2%98%86%E6%A5%B5%E2%98%85%E6%9C%8D.csv
05 %E5%90%8D%E4%BB%98%E6%89%87%E5%
正如您所看到的,最终的文件名在其中一个编码字符的中途被截断。
是否可以强制流块在某些字符或正则表达式组结束,例如在.csv
之后?我在其他地方还没有找到解决方案,这让我相信我采取了错误的方法。
另一方面,I可以简单地将每个缓冲区的输出写入hugeString
,然后对其进行操作,但我觉得这与Node流提供的其他优势并不一致。
您不能强制本地流块在任何给定的位置结束(它们就是流读取代码中的内容),但是,您可以创建自己的代码来读取流和缓冲区,直到它得到一整段,然后您可以触发自己的事件或回调来宣布您有一整段内容,或者您可以将流管道传输到转换流中,为您将其分解为行。
这是一篇关于转换流如何用于换行的好文章(这似乎与您所询问的概念基本相同)。