Java 如何解析带空格的BufferedReader()?

Java 如何解析带空格的BufferedReader()?,java,char,bufferedreader,Java,Char,Bufferedreader,有问题。为什么两种情况下都是空白?(通过使用readLine(),这没有问题。) 谢谢 String srcFile = "d:/javatest/File2String.txt"; BufferedReader br = new BufferedReader(new FileReader(srcFile)); char[] chs = new char[1024]; int len = 0; //opt 1 while ((len = br.read

有问题。为什么两种情况下都是空白?(通过使用readLine(),这没有问题。)

谢谢

 String srcFile = "d:/javatest/File2String.txt";

 BufferedReader br = new BufferedReader(new FileReader(srcFile));

 char[] chs = new char[1024];

 int len = 0;

 //opt 1    while ((len = br.read(chs, 0, len)) != -1){   // Why are blanks with no endings???

 //opt 2    while ((len = br.read(chs)) != -1){           // Why are blanks with length of len???

 System.out.println(chs);

 }

System.out.println(chs)始终打印1024个字符,无论chs中读取了多少个字符。在opt2中,您读取
len
字符,并打印1024个字符,这样当len<1024时,输出中将有额外的字符-对于小文件,这些字符是
\0
,或者当filesize>1024时,将重复上一次迭代为最终循环读取的值

在opt1中,len最初为零,因此您在无限循环中调用
br.read(chs,0,0)
。您要求读取0并返回0-len从不从
0
更改,因为每次读取都返回0并分配回
len
。每次打印1024个
chs
-所有设置为
\0

通过将i=0循环到len并打印
System.out.print(chs[i])
,或者使用
System.out.println(新字符串(chs,0,len))
一步打印确切的chs缓冲区内容,但请注意,这是再次复制/复制内容

如果您只想将文件cat/键入当前控制台,则可以在不使用BufferedReader的情况下使用以下命令:

try(var os = new FileInputStream(srcFile)) {
   os.transferTo(System.out);
}

不清楚你所说的“为什么是空白”是什么意思。请显示代码的预期输出和实际输出。谢谢!在选项2的“这是一个测试”之后你会看到很多空白,在选项1的屏幕上你会看到很多空白。(你可以复制到IDE上看得更清楚。)非常感谢!我错误地接受了br.read()的错误,因为br.readNewLine()没有问题,正如您指出的,它是println()。你有没有办法在屏幕上打印不带空格的内容?谢谢!以及int len=0的问题;是int len=-1;您将得到“IndexOutOfBoundException”。在将[1024]保留为默认值时,为避免在br.read()处使用偏移量,还有一些其他建议吗?再次感谢!使用
br.read(chs)
会更容易,因为这会调用
br.read(chs,0,chs.length)
,所以长度总是设置正确。太好了!int len=0;或int len=-1;都可以工作,但((len=br.read(chs))!=0)调用错误“StringIndexOutOfBoundsException”。发狂地说,我听不懂你的句子“更容易使用br.read(chs),因为它调用br.read(chs,0,chs.length)-所以长度总是正确设置的。”你是说read(chs)等同于read(chs,0,length),因为“0”和“len”“是默认的吗?顺便说一句,使用abanding BufferedReader的建议很有创意!再次感谢!如果你有一个好的IDE:查看代码,或者进入
br.read(chs)
,你就会明白我的意思。好的。谢谢,祝你愉快!”!