我可以为InputStream的read()函数设置超时吗?

Zom*_*ies 7 java io

我有一个DataInputStream我从一个Socket.有什么办法可以设置超时dis.read(...)吗?目前我产生了一个新线程来进行读取.虽然父线程thread.join(timeout)在中断之前会等待.我知道nio,但我认为我不想在这一点上重构那么多.谢谢.

jar*_*bjo 14

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

  • 小心一起使用套接字超时和DataInputStream(以及BufferredInputStream).这些将缓冲或读取一些数据到临时内存(如在getLong()中),然后如果发生超时(等待来自套接字的更多数据),您将丢失以前读取的任何数据,并且*无法恢复*.SocketTimeoutException扩展了InterruptedIOException,它提供了在超时之前成功传输的字节数.使用原始套接字,您可以使用它来重试/继续(可能用于刷新错误消息). (4认同)