什么返回流末尾的常见二进制读取方法?

时间:2012-11-02 18:41:33

标签: c# stream binary byte

我有一个小问题。什么返回流末尾的常见二进制读取方法?例如,我有Stream.ReadByte()返回单个无符号字节。当我在流的末尾时会发生什么?当我在NetworkStream中使用这种方法时有什么不同吗?请帮忙。

2 个答案:

答案 0 :(得分:1)

根据documentation for the base class

  

返回值

     

类型:System.Int32
  无符号字节转换为Int32,如果在流的末尾则为-1。

因此,该方法读取一个int并将其强制转换为更宽的类型,以便能够在流的末尾返回额外的-1值。

FileStreamNetworkStream都来自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
}