How many bits does BinaryReader.PeekChar() read?
I am working on improving a stream reader class that uses a BinaryReader
. It consists of a while loop that uses .PeekChar()
to check if more 开发者_开发知识库data exists to continue processing.
The very first operation is a .ReadInt32()
which reads 4 bytes. What if PeekChar
only "saw" one byte (or one bit)? This doesn't seem like a reliable way of checking for EOF.
The BinaryReader
is constructed using its default parameters, which as I understand it, uses UTF8 as the default encoding. I assume that .PeekChar()
checks for 8 bits but I really am not sure.
How many bits does .PeekChar()
look for? (and what are some alternate methods to checking for EOF?)
Here BinaryReader.PeekChar
I read:
ArgumentException: The current character cannot be decoded into the internal character buffer by using the Encoding selected for the stream.
This makes clear that amount of memory read depends on Encoding applied to that stream.
EDIT
Actually definition according to MSDN is:
Returns the next available character and does not advance the byte or character position.*
Infact, it depends on encoding if this is a byte or more...
Hope this helps.
Making your Read*()
calls blindly and handling any exceptions that are thrown is the normal method. I don't believe that the stream position is moved if anything goes wrong.
The PeekChar() method of BinaryReader is very buggy. Even when trying to read a from a memory stream with UTF8 encoded data, PeekChar() throws an exception after reading a particular length of the stream. The BCL team has acknowledged the issue, but they have not committed to resolving the issue. Their only response is to avoid using PeekChar() if you can.
精彩评论