我一直想知道:流的结束是什么?
在java.io包中的大多数readLine方法的javadoc中,您可以读到“如果到达流的末尾,则返回null” – 尽管我从未实际获得null,因为大多数流(在网络的情况下)我经常使用的流只是阻止程序执行,直到将某些内容写入远程端的流中
有没有办法以实际的非例外投掷方式强制执行这种行为?我只是好奇……
解决方法
想想正在阅读的文件.那里有一个流的结尾,文件的结尾.如果你试图超越它,你就是不能.如果您有网络连接,如果您只是等待发送更多数据,则无需成为流的结尾.
在文件的情况下,我们知道没有更多的数据需要读取.在网络流的情况下,我们(通常)不这样做.
当没有更多数据可用时阻止FileReader,当存在时唤醒:简单的答案是:你不能.根本区别在于您主动读取文件,但是当您收听网络流时,您会被动地阅读.当某些东西来自网络时,您的硬件会向操作系统发送一个信号,然后操作系统将新数据提供给您的JVM,然后JVM唤醒您的进程以读取新数据(可以这么说).但我们没有文件,至少不是立即.
一种可能的解决方法是为您拥有的StreamReader创建一个包装器,并在更改文件时通知一个侦听器,然后唤醒您进一步阅读.在Java 7中,您可以使用WatchService
.