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?

È stato utile?

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.

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