Domanda

Il mio Apache HTTP cliente sta leggendo i dati da un server che sta inviando lo streaming HTTP (in forma di dati Chunked) a noi.

Ho un flusso di input e Buffered Reader per ottenere i dati, e la lettura di questi dati utilizzando il metodo Buffered dati readLine.

InputStream inputStream = httpEntity.getContent();
br= new BufferedReader(new InputStreamReader(inputStream));

while ((line = br.readLine()) != null) 

Voglio chiudere la connessione se ottengo una risposta sbagliata dal server.

Per questo sto creando un TimerTask in un intervallo di tempo per chiudere la mia connessione. Sto l'analisi della risposta ogni volta che ricevo per controllare se la risposta è corretta, se la risposta è corretta, allora I ha ripristinato il timetask. Se trovo una risposta sbagliata in quel caso non si azzera il TimerTask (e lasciare che il TimerTask essere eseguito per il tempo precedentemente impostato per)

Vorrei sapere se usando I / O senza buffer può aiutare? o Ho bisogno di qualche altro approccio?

problema che vedo è dal momento che la connessione è aperta, la mia TimerTask è in grado di chiudere la connessione. inputStream.close o bufferReader.close entrambi non sono in grado di eseguire (sembrano aspettare all'infinito)

È stato utile?

Soluzione

BufferReader.close() sarà solo vicino l'inputStream, che a sua volta chiamerà inputStream.close(). Secondo il InputStream.close() API Java non fa nulla. È necessario chiudere il socket, o qualsiasi altra cosa è che si sta astraendo da httpEntity.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top