void readButDoNotBlockForALongTime(java.net.Socket socket) {
int someTimeout = 1000;
socket.setSoTimeout(someTimeout);
try {
// read as much as you want - blocks until timeout elapses
} catch (java.net.SocketTimeoutException e) {
// read timed out - you may throw an exception of your choice
}
}
Это простой способ блокировать столько, сколько вы хотите.
setSoTimeout (int timeout): включить / отключить SO_TIMEOUT с указанным тайм-аутом в миллисекундах.Если для этой опции задано ненулевое время ожидания, вызов read () для InputStream, связанного с этим сокетом, будет блокироваться только на этот промежуток времени.Если время ожидания истекает, создается исключение java.net.SocketTimeoutException, хотя Socket все еще действует.Эта опция должна быть включена до начала операции блокировки, чтобы иметь эффект.Тайм-аут должен быть> 0. Тайм-аут, равный нулю, интерпретируется как бесконечный тайм-аут.
Для более элегантного решения вы можете рассмотреть возможность использования NIO.