Как именно символы хранятся и передаются в BufferedReader с использованием итераций? - PullRequest
0 голосов
/ 05 сентября 2018

Название может выглядеть слишком общим, но вот оно. Я нашел этот код:

//class, main, etc.
char c;
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
System.out.println("Enter e to exit!");

do
{
    c=(char)br.read();
    System.out.println(c);
}while(c!='q');

/*Example output:
  12ae
  1
  2
  a
  e */
  //Where I type 12ae and press enter initially

Как именно достигается результат, когда println () вызывается каждый раз, когда c присваивается значение, и char может хранить только один символ?

Разве это не должно быть (по моему пониманию): На первой итерации 1 передается в с, println (c) называется, Начинается вторая итерация, 2 пройдено и так далее,

дает вывод: 1 1 2 2 е е (Где первое вхождение - это мой ввод после нажатия клавиши ввода, второе - это вывод с символом новой строки из-за свойства println)

Или, так как br является буферизованной строкой, но c может хранить только один символ, после ввода передается только один символ:

В этом случае вывод будет: 12ae е

в ореховой скорлупе: Как несколько данных (12ae) передаются за один раз (после того, как я нажал клавишу ввода, после ввода) для повторной печати?

Я действительно запутался и посмотрел онлайн, где я нахожу обычные общие определения (каламбур), но не четкое решение. Спасибо!

1 Ответ

0 голосов
/ 05 сентября 2018

Я предлагаю вам пройтись по коду в вашем отладчике, чтобы посмотреть, что он делает.

Вы правы, что c имеет только одно значение за раз.

Если у вас есть 1 1 2 2 a a e e в качестве ввода, это 15 символов, включая пробелы.

В вас введено

12ae<enter>
1<enter>
2<enter>
a<enter>
e<enter>
q

Это будет печатать

1
2
a
e

1

2

a

e

как <enter> тоже символ, часто пишется как \n в Java.

Или, поскольку br является буферизованной строкой, но c может хранить только один символ, после ввода передается только один символ:

Буферизация означает, что данные временно хранятся в памяти до тех пор, пока они вам не понадобятся.

Это не br с линейной буферизацией, а ваша консоль. Если бы вы использовали его для чтения файла, он не буферизовал бы построчно, а по умолчанию 8192 байта за раз.

неясное решение

Здесь помогает пошаговое выполнение кода, вы даже можете посмотреть на данные в BufferedReader.

...