Pergunta

Eu estou usando java.util.Scanner para coisas como nextInt () e tudo estava funcionando bem, enquanto eu estava usando um java.lang.Readable (primeiro e único argumento do construtor). No entanto, quando eu mudei para usar um InputStream em vez disso, Scanner.nextInt () nunca retorna. Você sabe por que?

Meu implementação dos olhares InputStream como esta:

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 eu imprimir os dados com o comentário I (corretamente) obter coisas como '1', '2', '\ n' para "12 \ n", etc. Existe alguma conexão do scanner, sem o conhecimento de mim, que causar esse comportamento?

Foi útil?

Solução

A partir dos javadocs para leitura do InputStream () método:

"Retorna:. O próximo byte de dados, ou -1, se o fim da sequência é atingido"

Eu acho que você nunca está retornando -1?

Outras dicas

Eu acho que o problema é com o seu InputStream auto-construída. Por que você construir o seu próprio, ao invés de simplesmente simplesmente usando System.in?

Update:

input queria de um JTextField.

OK, entendi. Ele geralmente não faz sentido usar I / O manuseio de ler o material que já está disponível, em forma de caracteres, mas eu posso ver como isso iria tornar sua vida mais fácil com Scanner.

Ainda assim, você poderia provavelmente ter-se algum de codificação e tristeza salva usando um "acabado" InputStream. O que vem à mente é

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

Java I / O é nojento. Alegrai as brilhantes pessoas da Sun têm encapsulado a maior parte fora para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top