Qualquer maneira de usar java.nio. * Para interromper um InputStream # read () sem fechar o soquete?
Você conhece uma maneira de interromper uma leitura de um JavaInputStream
sem fechar o soquete associado?
Aqui está a estratégia de construção atual para capturar um fluxo de entrada de soquete e converter para um DataInputStream interruptível:
InputStream interruptibleInputStream = Channels.newInputStream(Channels.newChannel(m_ConnectionData.getSocket().getInputStream()));
DataInputStream myInterruptibleDIS = new DataInputStream(interruptibleInputStream);
Isso faz uso de umReadableByteChannel
que oferece umread(ByteBuffer)
método com suporte para umClosedByInterruptException
jogável.
O problema é que chamar uma interrupção no encadeamento fazendoread()
chama oDataInputStream
faz com que o soquete subjacente seja fechad
Para meu contexto, preciso que o soquete permaneça aberto; aread
chamada @ está aguardando a entrada do usuário, o que não está chegando; portanto, estou usando a interrupção para passar o controle de volta para um componente superior e, finalmente, retornando pararead
novamente
Ficaria muito grato se alguém pudesse sugerir uma maneira de conseguir isso usando as classes incorporadas do JDK, ou talvez lembrando que não é possível com algumas informaçõe
Entendo que existem outras maneiras de obter o mesmo efeito, mas, no entanto, estou curioso para saber se essa abordagem é viáve