我有一个相当大的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
之后?我还没有在其他地方找到解决方案,这让我相信我采取了错误的方法。
另一方面,我可以简单地将每个缓冲区的输出写入hugeString
,然后对其进行操作,但我觉得好像不是真的在保持Node流提供的其他优势。
答案 0 :(得分:2)
您无法强制本地流块在任何给定位置结束(它们是来自流读取代码的内容),但是您可以创建自己的代码来读取流和缓冲区,直到它获得整块然后你可以触发你自己的事件或回调来宣布你有一个完整的部分,或者你可以将流传输到一个变换流中,然后将它分成几行。
这里有一个good article关于变换流如何用于换行(这看起来基本上与你所询问的概念相同)。