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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BinaryReader.PeekChar()读取了多少位?相关的知识,希望对你有一定的参考价值。

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

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

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

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

答案

在这里BinaryReader.PeekChar

我读:

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

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

编辑

实际上根据MSDN的定义是:

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

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

希望这可以帮助。

另一答案

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

另一答案

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

以上是关于BinaryReader.PeekChar()读取了多少位?的主要内容,如果未能解决你的问题,请参考以下文章

nacos 读取配置文件占位符读取不出来

用C#读取XML文件,怎么可以循环读取

TypeError:无法在 gitlab 中读取未定义的属性(读取“读取”)

R读取xlsx文件

java 读取大容量文件,内存溢出?怎么按几行读取,读取多次。

2015版vs c#读取excel代码