BufferedReader中涉及迭代的字符存储和传递的确切方式是什么?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BufferedReader中涉及迭代的字符存储和传递的确切方式是什么?相关的知识,希望对你有一定的参考价值。
标题看起来可能过于笼统,但在这里。我找到了这段代码:
//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)如何一次性传递(在我输入后,在输入之后)重复打印?
我真的很困惑,并且已经在线查看,在那里我找到了通常的通用定义(双关语),但不是一个明确的解决方案。谢谢!
我建议你逐步调试调试器中的代码,看看它在做什么。
你是对的,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编写为
。
或者,由于br是行缓冲的,但是c只能存储一个字符,因此在输入输入后只传递一个字符:
缓冲意味着它会暂时将数据保存在内存中,直到您需要它为止。
它不是br
线缓冲,而是你的控制台。如果您要使用它来读取文件,它不会按行缓冲,而是默认情况下一次缓冲8192个字节。
不清楚的解决方案
这是逐步执行代码有帮助的地方,您甚至可以查看BufferedReader中的数据。
以上是关于BufferedReader中涉及迭代的字符存储和传递的确切方式是什么?的主要内容,如果未能解决你的问题,请参考以下文章
将Scala中BufferedReader的所有行读入字符串
JAVA之旅(二十五)——文件复制,字符流的缓冲区,BufferedWriter,BufferedReader,通过缓冲区复制文件,readLine工作原理,自定义readLine