BinaryReader.PeekChar()读取多少位?



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

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

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

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

这里是BinaryReader。PeekChar

I read:

ArgumentException:当前字符不能被解码成属性所选择的编码来使用内部字符缓冲区流。

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

编辑

实际上根据MSDN的定义是:

返回下一个可用的字符,并且不推进<<em>字节/em> 字符位置。*

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

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

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

相关内容

最新更新