-1

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

4

2 回答 2

1

根据基类的文档

返回值

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

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

FileStream和都NetworkStream源自Stream。这意味着不需要逻辑上的差异。

于 2012-11-02T18:44:46.447 回答
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
} 
于 2012-11-02T18:51:03.640 回答