是否可以通过超时从InputStream读取?

是否可以通过超时从InputStream读取?

具体来说,问题是编写这样的方法:

int maybeRead(InputStream in, long timeout)

如果数据在‘超时值’毫秒内可用,则返回值与in.read()相同,否则返回值为-2。在该方法返回之前,任何生成的线程都必须退出。

为了避免参数,这里的主题是java.io.InputStream,由Sun(任何Java版本)记录。请注意,这并不像看上去那么简单。以下是Sun文档直接支持的一些事实。

  1. in.read()方法可能是不可中断的。

  2. 将InputStream封装在Reader或InterruptibleChannel中没有帮助,因为这些类所能做的就是调用InputStream的方法。如果可以使用这些类,则可以编写一个解决方案,直接在InputStream上执行相同的逻辑。

  3. in.Available()返回0总是可以接受的。

  4. in.lose()方法可能阻塞或不做任何操作。

  5. 没有一般的方法来杀死另一个线程。


梵蒂冈之花
浏览 1187回答 3
3回答

一只萌萌小番薯

我会质疑问题陈述,而不是盲目地接受它。您只需要从控制台或网络中超时。如果后者你有Socket.setSoTimeout()和HttpURLConnection.setReadTimeout()只要您在构造/获取它们时正确地设置了它们,这两种方法都可以完成所需的任务。把它留给应用程序后面的任意点,而您所拥有的只是InputStream的糟糕设计,导致了非常尴尬的实现。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java