我创建了一个使用FileStream的StreamReader。在StreamReader方法的最后,当使用Peek()方法时,我看到数值65535.转换为char时表示句点'。'在VS中使用'watch',我可以看到已经到达EndOfStream。 65535('。')值是什么意思?句点('。')是否与ASCII对应?
我以为我听说'0'表示文件/流的结尾。
注意:如果流正在使用文件,我不确定EOF和EOS(流结束)之间是否存在差异。
//Contains some business logic, main focus is on the while loop expression
try
{
//The peek method is used to avoid moving the Stream's position.
//If we don't encounter a number character representing the RDW, keep reading until we find one.
while (!Char.IsDigit((char)this.StreamReader.Peek()))
{
if (!this.StreamReader.EndOfStream)
this.StreamReader.Read();
else
return false;
}
//Loop completed and found the next record without encountering the end of the stream
return true;
}
catch (IOException IOex)
{
throw new Exception(String.Format("An IO Exception occured when attempting to set the start position of the record.\n\n{0}", IOex.ToString()));
}
答案 0 :(得分:7)
这意味着您在检查之前已将 StreamReader.Read()
的StreamReader.Peek()
的结果投放到char
以查看是否是-1
(意思是它是流的结尾)。首先检查Peek()
的返回值,如果是-1
则停止。
请注意,流的“逻辑”端可能与流的实际末尾不同。当你到达一个空字符时,你可能会认为流结束了,但没有人说它必须达到那个,没有人说它不能有更多的数据。所以要小心你正在使用哪一个。
哦,如果你想知道为什么它是65,535 - 那是2^16 - 1
,它是十六进制的0xFFFF。如果您将-1
(0xFFFFFFFF
)投射到char
,就会得到这些。