Вопрос

Я использую 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», « » для «12 » и т. д.Есть ли какое-то подключение сканера, о котором я не знаю, которое вызывает такое поведение?

Это было полезно?

Решение

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

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

Я предполагаю, что вы никогда не вернете -1?

Другие советы

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

Обновлять:

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

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

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

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

Java-ввод-вывод — это отвратительно.Радуйтесь, что умные люди из Sun сохранили для вас большую часть этого.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top