BinaryReader.PeekChar()读取了多少位?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BinaryReader.PeekChar()读取了多少位?相关的知识,希望对你有一定的参考价值。
我正在努力改进使用BinaryReader
的流阅读器类。它由一个while循环组成,它使用.PeekChar()
检查是否存在更多数据以继续处理。
第一个操作是.ReadInt32()
,读取4个字节。如果PeekChar
只“看到”一个字节(或一位)怎么办?这似乎不是检查EOF的可靠方法。
BinaryReader
是使用其默认参数构造的,据我所知,它使用UTF8作为默认编码。我假设.PeekChar()
检查8位但我真的不确定。
.PeekChar()
需要多少位? (以及检查EOF的其他方法有哪些?)
我读:
ArgumentException:通过使用为流选择的编码,无法将当前字符解码为内部字符缓冲区。
这清楚地表明读取的内存量取决于应用于该流的编码。
编辑
实际上根据MSDN的定义是:
返回下一个可用字符,不会使字节或字符位置前进。*
事实上,如果这是一个字节或更多,它取决于编码...
希望这可以帮助。
让你的Read*()
盲目调用并处理任何抛出的异常是正常的方法。如果出现任何问题,我不相信流位置会被移动。
BinaryReader的PeekChar()方法非常错误。即使在尝试使用UTF8编码数据从内存流中读取a时,PeekChar()在读取特定长度的流后也会抛出异常。 BCL团队已经承认了这个问题,但他们并没有承诺解决这个问题。他们唯一的反应就是尽可能避免使用PeekChar()。
以上是关于BinaryReader.PeekChar()读取了多少位?的主要内容,如果未能解决你的问题,请参考以下文章
TypeError:无法在 gitlab 中读取未定义的属性(读取“读取”)