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

问题描述 投票:7回答:3

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

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

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

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

c# stream binaryreader
3个回答
4
投票

在这里BinaryReader.PeekChar

我读:

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

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

编辑

实际上根据MSDN的定义是:

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

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

希望这可以帮助。


1
投票

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


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.