Java InputStream! = Leggibile
-
19-09-2019 - |
Domanda
Sto usando java.util.Scanner per cose come nextInt (), e tutto funzionava bene finché Io sto usando un java.lang.Readable (argomento unico e solo costruttore). Tuttavia, quando ho cambiato ad usare un InputStream, invece, Scanner.nextInt () non ritorna mai. Sapete perché?
Il mio attuazione del InputStream si presenta così:
private static class ConsoleInputStream extends InputStream {
...
private byte[] buffer;
private int bufferIndex;
public int read() throws IOException {
...
while (...) {
if (buffer != null && bufferIndex < buffer.length) {
return buffer[bufferIndex++]; // THE COMMENT!
}
...
}
...
}
}
Quando stampo il dato per il commento che ho (correttamente) ottenere cose come '1', '2', '\ n' per "12 \ n", ecc C'è qualche collegamento dello scanner, a mia insaputa, che causare questo comportamento?
Soluzione
Dalle javadocs per lettura di InputStream () Metodo:
"Restituisce:. Il successivo byte di dati, oppure -1 se viene raggiunta la fine del flusso"
Direi che non si è mai tornare -1?
Altri suggerimenti
Credo che il problema è con il vostro InputStream auto-costruito. Perché hai costruire il proprio, piuttosto che semplicemente semplicemente usando System.in?
Aggiornamento:
ingresso volevamo da una JTextField.
OK, ricevuto. Di solito non ha senso utilizzare la gestione di I / O di leggere roba che è già disponibile, in forma di carattere, ma posso vedere come sarebbe rendere la vita più facile con scanner.
Ancora, si potrebbe forse aver salvato un bel po 'di codifica e il dolore utilizzando un InputStream "finito". Ciò che viene in mente è
InputStream is = new ByteArrayInputStream(myTextField.getText().getBytes());
Java I / O è schifo. Sarà felice le persone brillanti da Sun hanno incapsulato la maggior parte di via per voi.