[英]Input/Output Stream : End of Stream?
我一直想知道:流的结束是什么?
在java.io包中的大多数readLine方法的javadoc中,您可以读到“如果到达流的末尾,则返回null” - 尽管我从未实际获得null,因为大多数流(在网络的情况下)我经常使用的流)只是阻止程序执行,直到将某些内容写入远程端的流中
有没有办法以实际的非例外投掷方式强制执行这种行为? 我只是好奇......
想想正在阅读的文件。 那里有一个流的结尾,文件的结尾。 如果你试图超越它,你就是不能。 如果您有网络连接,如果您只是等待发送更多数据,则无需成为流的结尾。
在文件的情况下,我们知道没有更多的数据需要读取。 在网络流的情况下,我们(通常)不这样做。
当没有更多数据可用时阻止FileReader
,当存在时唤醒:简单的答案是: 你不能 。 根本区别在于您主动读取文件,但是当您收听网络流时,您会被动地阅读。 当某些东西来自网络时,您的硬件会向操作系统发送一个信号,然后操作系统将新数据提供给您的JVM,然后JVM唤醒您的进程以读取新数据(可以这么说)。 但我们没有文件,至少不是立即。
一种可能的解决方法是为您拥有的StreamReader
创建一个包装器,并在更改文件时通知一个侦听器,然后唤醒您进一步阅读。 在Java 7中,您可以使用WatchService
。
我从来没有真正得到一个null,因为大多数流(在我经常使用的网络流的情况下)只是阻止程序执行,直到某些东西写入远程端的流
不会。你从来没有得到过null,因为对等体从未关闭过连接。 这就是“流的结束”的意思。 这并不意味着“暂时不再有数据”。
在某些时候,套接字将被关闭,并且不能再通过该流发送数据。 这是当InputStream
通过从read()
返回-1及其重载来发出EOF信号时。 这种状态是不可逆转的。 那条小溪已经死了。
简单地阻止开放流上的更多数据不是EOF条件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.