是否可以在某个字符处结束 Node 流块?

Is it possible to end Node stream chunks at a certain character?

我有一个相当大的 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 的流提供的其他优势保持一致。

您不能强制本机流块在任何给定位置结束(它们是来自流读取代码的内容),但您可以创建自己的代码来读取流和缓冲区,直到它获得整件,然后您可以触发自己的事件或回调以宣布您拥有整件,或者您可以将流通过管道传输到转换流中,转换流为您将其分成几行。

这里有一个 good article 关于转换流如何用于换行(这似乎与您所询问的基本相同的概念)。