Pregunta

Estoy utilizando java.util.Scanner para cosas tales como nextInt (), y todo estaba trabajando bien mientras yo estaba usando un java.lang.Readable (argumento único constructor). Sin embargo, cuando cambié a la utilización de un InputStream lugar, Scanner.nextInt () nunca regresa. ¿Sabe por qué?

Mi aplicación de la InputStream se ve así:

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!
            }
            ...
        }
        ...
    }
}

Al imprimir los datos por el comentario que (correctamente) conseguir cosas como '1', '2', '\ n' para "12 \ n", etc. ¿Hay alguna conexión del escáner, sin yo saberlo, que causar este comportamiento?

¿Fue útil?

Solución

A partir de los javadocs para lectura de InputStream () Método:

"Devuelve:. El siguiente byte de datos, o -1 si se alcanza el final de la secuencia"

Me imagino que usted nunca devolviendo -1?

Otros consejos

Creo que el problema es con su InputStream de construcción propia. ¿Por qué construir su propia, en lugar de limitarse simplemente usando System.in?

Actualización:

  

entrada queríamos de un JTextField.

Entendido. Por lo general, no tiene sentido utilizar el control de E / S para leer cosas que ya está disponible, en formato de caracteres, pero puedo ver cómo que hacer su vida más fácil con escáner.

Sin embargo, probablemente podría haber ahorrado algo de código y el dolor mediante el uso de un InputStream "terminado". Lo que viene a la mente es

InputStream is = new ByteArrayInputStream(myTextField.getText().getBytes());

Java I / O es asqueroso. Alégrate de la gente brillante del sol han encapsulado más de lejos para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top