Любой способ использования java.nio. * Для прерывания InputStream # read () без закрытия сокета?

Знаете ли вы способ прервать чтение из Java InputStream , не закрывая связанный сокет?

Вот текущая стратегия построения для захвата входного потока сокета и преобразования в прерываемый DataInputStream:

InputStream interruptibleInputStream = Channels.newInputStream(Channels.newChannel(m_ConnectionData.getSocket().getInputStream()));
DataInputStream myInterruptibleDIS = new DataInputStream(interruptibleInputStream);

Здесь используется ReadableByteChannel , который предлагает метод чтения (ByteBuffer) с поддержкой для выброса исключения ClosedByInterruptException .

Проблема в том, что вызов прерывания в потоке, вызывающем read () , вызывает DataInputStream , вызывает закрытие базового сокета.

В моем контексте мне нужно, чтобы сокет оставался открытым; вызов read ожидает ввода пользователя, который не поступает, поэтому я использую прерывание, чтобы передать управление обратно вышестоящему компоненту, а затем в конечном итоге снова возвращаюсь к read .

Я был бы очень благодарен, если бы кто-нибудь мог предложить способ достижения этого с помощью встроенных классов JDK или, возможно, указать, что это невозможно с некоторой информацией.

Я понимаю, что есть другие способы достичь того же эффекта, но тем не менее мне любопытно узнать, возможен ли этот подход.

9
задан elixenide 31 December 2013 в 01:48
поделиться