【发布时间】:2011-08-25 07:51:27
【问题描述】:
我有一个Stream,它产生UTF-8 编码字符串。这些字符串代表我需要解析的 XML 文档。流是从TcpClient 获取的。
假设我将流读入大小为 64 的缓冲区(我知道有点小)。将这些 64 字节缓冲区直接传递给字符串解码步骤可能会失败,因为某些 UTF-8 编码字符可能会沿 64 字节边界拆分。缓冲区可能以字符的前两个字节结束,下一个缓冲区包含该字符的最后一个字节。
我现在要做的是连接缓冲区,直到我执行的读取没有读取完整的 64 个字节,这表明我已经读取到某个内容的末尾(在我的例子中,是一个 XML 文档)。但是,有时,我阅读的 XML 文档恰好在 64 字节边界处结束。在这种情况下,我不知道我可以将字节数组传递给解码步骤(我需要等待下一个文档)。
我意识到我可以通过增加缓冲区大小来降低机会。然而,它发生的机会总是很小。我还可以增加缓冲区大小,以便我遇到的任何 XML 文档都适合,但我只是想知道是否有另一种解决方案,以某种方式从字节流中检测字符边界所在的位置。
【问题讨论】: