Java InputStream! = Читаемый - PullRequest
       18

Java InputStream! = Читаемый

1 голос
/ 09 января 2010

Я использую java.util.Scanner для таких вещей, как nextInt (), и все работало нормально, пока я использовал java.lang.Readable (один-единственный аргумент конструктора). Однако, когда я переключился на использование InputStream, Scanner.nextInt () никогда не возвращается. Знаете почему?

Моя реализация InputStream выглядит следующим образом:

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

Когда я печатаю данные КОММЕНТАРИЕМ, я (правильно) получаю такие вещи, как «1», «2», «\ n» для «12 \ n» и т. Д. Есть ли какое-то незавершенное соединение со сканером, которое вызвать такое поведение?

Ответы [ 2 ]

3 голосов
/ 09 января 2010

Из javadocs для метода read () InputStream:

"Возвращает: следующий байт данных или -1, если достигнут конец потока."

Я думаю, ты никогда не вернешь -1?

1 голос
/ 09 января 2010

Я думаю, проблема в том, что вы сами создали InputStream. Почему вы создали свой собственный, а не просто с помощью System.in?

Обновление:

Требуется ввод данных из JTextField.

ОК, понял. Обычно не имеет смысла использовать обработку ввода-вывода для чтения уже доступных символов в виде символов, но я вижу, как это облегчит вашу жизнь со Scanner.

Тем не менее, вы, возможно, могли бы сэкономить немного кода и скорби, используя «готовый» InputStream. Что приходит на ум, это

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

Ввод / вывод в Java - отвратительный. Радуйтесь, что яркие люди из Солнца заключили для вас большую часть этого.

...