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