7

我正在努力改进一个使用BinaryReader. 它由一个 while 循环组成,用于.PeekChar()检查是否存在更多数据以继续处理。

第一个操作是.ReadInt32()读取 4 个字节的 a。如果PeekChar只“看到”一个字节(或一位)怎么办?这似乎不是检查 EOF 的可靠方法。

是使用其默认参数构造的BinaryReader,据我所知,它使用 UTF8 作为默认编码。我假设.PeekChar()检查 8 位,但我真的不确定。

.PeekChar()寻找多少位?(还有哪些检查 EOF 的替代方法?)

4

3 回答 3

4

这里BinaryReader.PeekChar

我读:

ArgumentException:无法使用为流选择的编码将当前字符解码到内部字符缓冲区中。

这清楚地表明,读取的内存量取决于应用于该流的编码。

编辑

实际上根据 MSDN 的定义是:

返回下一个可用字符并且不推进 字节 字符位置。*

事实上,如果这是一个字节或更多,这取决于编码......

希望这可以帮助。

于 2011-08-24T21:00:44.250 回答
1

盲目Read*()地调用并处理抛出的任何异常是正常的方法。如果出现任何问题,我不相信流位置会移动。

于 2011-08-24T20:54:25.750 回答
0

BinaryReader 的 PeekChar() 方法非常有问题。即使尝试从具有 UTF8 编码数据的内存流中读取 a,PeekChar() 也会在读取特定长度的流后引发异常。BCL 团队已经承认了这个问题,但他们没有承诺解决这个问题。他们唯一的反应是尽可能避免使用 PeekChar()。

于 2017-12-29T09:50:56.020 回答