BinaryReader.PeekChar()读取了多少位?

时间:2011-08-24 20:48:19

标签: c# stream binaryreader

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

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

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

.PeekChar()寻找多少位? (以及检查EOF的其他方法有哪些?)

3 个答案:

答案 0 :(得分:4)

此处BinaryReader.PeekChar

我看了:

  

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

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

修改

实际上根据MSDN的定义是:

  

返回下一个可用的字符,但不会前进   字节 字符位置。*

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

希望这有帮助。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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