Java 我可以为InputStream设置超时吗';s read()函数?

Java 我可以为InputStream设置超时吗';s read()函数?,java,io,Java,Io,我有一个DataInputStream,它是我从Socket获取的。我有没有办法为dis.read(…)设置超时?目前,我生成了一个新线程来进行读取。而父线程执行thread.join(超时)以在中断之前等待。我知道nio,但我不认为我现在要重构那么多。谢谢。通常不在输入流上,但您可以使用Socket#setotimeout(int)为套接字本身上的所有读取操作设置超时。啊,谢谢,我错过了那个。我唯一的后续问题是:每次调用read()时,这一时间似乎都很重要,可能会多次调用。是否有一种方法可以设

我有一个
DataInputStream
,它是我从
Socket
获取的。我有没有办法为
dis.read(…)
设置超时?目前,我生成了一个新线程来进行读取。而父线程执行
thread.join(超时)
以在中断之前等待。我知道nio,但我不认为我现在要重构那么多。谢谢。

通常不在输入流上,但您可以使用
Socket#setotimeout(int)
为套接字本身上的所有读取操作设置超时。

啊,谢谢,我错过了那个。我唯一的后续问题是:每次调用read()时,这一时间似乎都很重要,可能会多次调用。是否有一种方法可以设置整个超时时间,以便在每次读取()的总和超过超时时超时?不是自动设置的,但您可以设置比实际超时短的S0超时,并在超过允许的总运行时间时检查循环。请小心同时使用套接字超时和DataInputStream(还有一个BufferredInputStream)。它们将缓冲或读取一些数据到临时内存中(如getLong()),然后如果发生超时(等待来自套接字的更多数据)您将丢失以前读取的任何数据,并且无法恢复。SocketTimeoutException扩展InterruptedIOException,它提供超时之前成功传输的字节数。使用原始套接字,您可以使用它重试/继续(可能是为了清除错误消息)@Zombies:可能最好为您的额外请求创建另一个问题。