繁体   English   中英

输入/输出流:流结束?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM