![]() |
1
7
视情况而定。有各种流类型不实现Length或Position属性,您会得到NotSupportedException。例如NetworkStream。当然,如果你要使用这样的流,那么你真的必须事先知道多久调用一次二进制读取器。读取()方法。所以,是的,没事。 |
|
2
10
我发现的最简单的方法是检查BinaryReader的PeekChar()方法的返回值。如果它返回-1,那么您到达了流的末尾。 |
![]() |
3
3
这不是一个通用的解决方案,因为它假设
|
|
4
1
我注意到,在StreamReader上比较位置和长度是行不通的,即使底层的基流支持查找。似乎StreamReader缓冲区从基流中提前读取。这就是为什么StreamReader提供EndOfStream属性,这是一件好事,我希望BinaryReader也这样做。 在底层基流上检查这些值(长度和位置)会导致BinaryReader的行为与StreamReader不同,即,BinaryReader仅从基流获取完成用户方法调用所需的确切字节数。假设BinaryReader实际上是以这种方式在内部运行的,这就是为什么它不需要提供EndOfStream,但我确实希望它提供一个EndOfStream,这样我就知道文件结尾是以独立于实现的方式为客户机正确处理的。
|
![]() |
5
0
检查Streams CanSeek属性。如果此属性返回true,则可以将流的长度与流的位置进行比较,以判断您是否在流的末尾。如果此属性返回false,则这将不起作用。 对于网络流,您可能需要区分可用字节的结尾(另一端的客户端仍有更多的字节要写,但尚未写入)和正在关闭的流。底层Tcp连接的IsConnected属性对于知道流何时关闭是不可靠的。可以枚举计算机具有的连接,并查看您使用的流是否在这些连接中。这更可靠,但更复杂。当你不能读取任何异常时,最好只处理IOExceptions |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |