Java InputStream != Читабельно
-
19-09-2019 - |
Вопрос
Я использую 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 сохранили для вас большую часть этого.