是否有可能结束节点stream块在某个字符?

我有一个相当大的XML文件,我stream到一个函数,就像这样:

var stream = fs.createReadStream(__dirname + '/File.xml').pipe(myfunction); 

stream式传输function的内容并不重要,除了涉及将stream分割为所需的string并在其上运行decodeURIComponent 。 我遇到的问题是,一些块通过编码的string中途结束:

 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% 

正如你所看到的,最终的文件名是通过一个编码字符中途截断的。

是否有可能迫使stream块结束在某些字符或正则expression式组,例如。 .csv ? 我还没有在其他地方find解决办法,这使我相信我采取了错误的做法。

另一方面,我可以简单地将每个缓冲区的输出写入一个hugeString ,然后对其进行操作,但是我觉得这跟Node的stream所提供的其他好处并不hugeString

你不能强制本地stream块在任何给定的位置结束(它们是从stream读取代码中得到的),但是你可以创build自己的代码来读取stream和缓冲区,直到它得到一整块,然后你可以触发你自己的事件或callback,宣布你有一整块,或者你可以pipestream到一个转换stream,把它分成线为你。

这里有一篇关于变换stream如何工作的好文章 (这个问题似乎基本上和你所问的基本相同)。