我有一个小问题。什么返回流末尾的常见二进制读取方法?例如,我有Stream.ReadByte()
返回单个无符号字节。当我在流的末尾时会发生什么?当我在NetworkStream中使用这种方法时有什么不同吗?请帮忙。
答案 0 :(得分:1)
根据documentation for the base class:
返回值
类型:System.Int32
无符号字节转换为Int32,如果在流的末尾则为-1。
因此,该方法读取一个int并将其强制转换为更宽的类型,以便能够在流的末尾返回额外的-1值。
FileStream
和NetworkStream
都来自Stream
。这意味着逻辑上不需要区别。
答案 1 :(得分:0)
使用BinaryReder包装流,以使各种流类型具有相同的行为。 当你阅读结尾时,读者会抛出异常。
http://msdn.microsoft.com/en-us/library/system.io.endofstreamexception(v=vs.80).aspx
例外或-1?
这取决于你如何阅读流
using (var stream = new FileStream("c:\\smple.bin", FileMode.Open))
{
...
stream.ReadByte(); // will return -1 when reading over the end
}
但是当你这样做时:
using (var stream = new FileStream("c:\\smple.bin", FileMode.Open))
using (var reader = new BinaryReader(stream))
{
...
reader.ReadByte(); // will throw an exception
}