2013-03-19 13 views
5

C'è un modo per rendere BufferedReader.readLine() non bloccato?Come si può rendere BufferedReader.readLine() non sospeso?

Sto creando un server che:

  • Verifica se il cliente ha consegnato alcun input.
  • In caso contrario, esegue un altro codice e alla fine torna alla verifica del client per l'input.

Come posso verificare se il client ha consegnato qualsiasi input senza eseguire readLine()? Se corro readLine(), il thread si bloccherà fino a quando l'input non viene consegnato?

+2

Perché? Il server dovrebbe avere un thread di lettura separato per client se si sta utilizzando l'I/O di blocco. – EJP

+0

Non voglio creare due thread per ciascun utente. Ho già un thread per ogni utente. – Cin316

+1

Questa è la sfortunata realtà della libreria I/O di Java. È possibile 1) Filare thread separati per la lettura 2) Utilizzare la libreria NIO 3) Non utilizzare readLine() ed eseguire personalmente la gestione buffer e di fine linea – creechy

risposta

8

È possibile utilizzare BufferedReader.ready(), in questo modo:

BufferedReader b = new BufferedReader(); //Initialize your BufferedReader in the way you have been doing before, not like this. 

if(b.ready()){ 
    String input = b.readLine(); 
} 

ready() tornerà true se la fonte dell'ingresso non ha messo nulla nel flusso che non è stato letto.

Modifica: solo una nota, pronta restituirà true ogni volta che è presente un solo carattere. È possibile utilizzare read() per verificare se è presente un avanzamento riga o un ritorno a capo e quelli indicano una fine riga.

Per maggiori informazioni: http://docs.oracle.com/javase/7/docs/api/java/io/BufferedReader.html#ready()

+7

Questo non garantisce solo che la prossima chiamata a 'read()' non blocca? Il link non dice nulla su 'readLine()'. – Keppil

+2

Anche se è pronto, ciò significa solo che esiste almeno un byte, non necessariamente un'intera linea. Questo non funzionerà necessariamente in tutti i casi, anche se potresti essere fortunato e funzionerà per quello che stai facendo. – TofuBeer

Problemi correlati