Не понимаю как передаются байты с консоли в программу

208
30 июня 2018, 13:30

Объясните, пожалуйста, почему, если я буду нажимать следующие клавиши по очереди: {a,enter,b,enter,q, enter}, то я увижу ужасно странный вывод, который отделяет предыдущий ввод от нынешнего ~пятью сносами строки?

Код:

BufferedReader  in = new BufferedReader (new InputStreamReader(System.in));
char c;
do {
    c = (char)in.read();
    System.out.println(c);
} while (c!='q');

Ожидание:

a
a
b
b
q

Реальность:

a
a


b
b


q
q

Даже если думать, что при нажатии на enter отправляется ещё и непосредственно \n в поток, то вывод должен быть такой после первой введённой буквы:

a
a

b...

Т.е. от куда ещё выводится один снос строки?...

Смешно ещё, что такой код будет давать ожидаемый результат:

BufferedReader  in = new BufferedReader (new InputStreamReader(System.in));
String s;
do {
    s = in.readLine();
    System.out.println(s);
} while (!s.equals("q"));
Answer 1

С Вашего первого примера у меня выводит, если "слушать" коды то:

a (сам ввод в консоль)
97 (код буквы в ASCII)
10 (LF, код переноса строки) // далее ниже следующие символы
b
98
10
q
113

Предполагаю, что т.к char это один символ, то и перенос строки \n (исходит, вероятно, от Enter) выводится при печати как отдельный символ. Если использовать метод без переноса строки, а именно System.out.print(), то:

a
a
b
b
q
q

Если в кодах:

a
9710b
9810q
113
READ ALSO
Переход страницы после регистрации Android Studio

Переход страницы после регистрации Android Studio

Нужна помощь! Как сделать переход на чистую страницу после того, как пользователь полностью зарегистрировался в приложении? То есть если...

203
Как использовать spring webflux,

Как использовать spring webflux,

мне нужно только для двух добавления двух сервисов, который не будет меняться в дальнейшем, читаю и вижу два варианта без spring boot и со спрингомкакой...

194
Странное поведение Maven и Java

Странное поведение Maven и Java

Всем доброго дняПару дней назад появилась странная ошибка в Intelij IDEA:

180
Что такое Tomcat, Jboss и др.?

Что такое Tomcat, Jboss и др.?

Опыт веб программирования: неделяДа, я знаю, что это сервера приложений, но насколько я понял (почти уверен, что не прав) это только эмуляторы...

179