BufferedReader中涉及迭代的字符存储和传递的确切方式是什么?

问题描述 投票:0回答:1

标题看起来可能过于笼统,但在这里。我找到了这段代码:

//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

当每次为c赋值时调用println()并且char只能存储一个字符时,输出到底是多少?

不应该(根据我的理解):在第一次迭代中,1被传递给c,println(c)被调用,第二次迭代开始,2被传递,依此类推,

给出一个输出:1 1 2 2 a e e(在我按下回车后第一次出现的是我的输入,第二次是由于println的属性而带有换行的输出)

或者,由于br是行缓冲的,但是c只能存储一个字符,因此在输入输入后只传递一个字符:

在这种情况下输出将是:12ae e

在坚果中:多次数据(12ae)如何一次性传递(在我输入后,在输入之后)重复打印?

我真的很困惑,并且已经在线查看,在那里我找到了通常的通用定义(双关语),但不是一个明确的解决方案。谢谢!

java char inputstream bufferedreader bufferedinputstream
1个回答
0
投票

我建议你逐步调试调试器中的代码,看看它在做什么。

你是对的,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>也是一个角色,通常用Java编写为\n

或者,由于br是行缓冲的,但是c只能存储一个字符,因此在输入输入后只传递一个字符:

缓冲意味着它会暂时将数据保存在内存中,直到您需要它为止。

它不是br线缓冲,而是你的控制台。如果您要使用它来读取文件,它不会按行缓冲,而是默认情况下一次缓冲8192个字节。

不清楚的解决方案

这是逐步执行代码有帮助的地方,您甚至可以查看BufferedReader中的数据。

© www.soinside.com 2019 - 2024. All rights reserved.