黑马程序员技术交流社区
标题:
看得有点晕了,请教下关于一个小程序的问题
[打印本页]
作者:
莫嘉伟
时间:
2013-2-21 23:53
标题:
看得有点晕了,请教下关于一个小程序的问题
import java.io.IOException;
import java.io.*;
public class FileReaderTest {
public static void main(String[] args){
try{FileReader fr=new FileReader("FileReaderTest.java");
char[] cbuf=new char[32];
int hasRead=0;
while((hasRead=fr.read(cbuf))>0){
System.out.print(new String(cbuf,0,hasRead));
}
}catch(IOException e){
e.printStackTrace();
}
}
}
上面代码是的作用是输出源文件的内容的,其他都没啥,可是那个Char[]数组长度才32字符,我看这代码怎么也不止32字符吧,我本来觉得它是跑不好或者说只会输出部份内容的,可最后输出正确,书上说是通过多次调用read()方法输出的,可这cbuf数组才32字符,存满了就没啦·又不会重新建一个,他怎么多次调用,还是说它每次读32个,然后输出,然后再读32个这样?
作者:
张豪杰
时间:
2013-2-22 00:35
那个只是缓冲数组,不是说一定要把需要复制的文件全部放进数组里面才打印出来,如果缓冲数组装满了,它就输出,然后再继续读取。
在这个问题上,其实你可以加一句代码验证下
public class FileReaderTest {
public static void main(String[] args){
try{FileReader fr=new FileReader("FileReaderTest.java");
char[] cbuf=new char[32];
int hasRead=0;
while((hasRead=fr.read(cbuf))>0){
//在这里加上一句打印缓冲数组长度的语句
System.out.print(“cubf.length......"+cubf.length);
System.out.print(new String(cbuf,0,hasRead));
}
}catch(IOException e){
e.printStackTrace();
}
}
}
运行结果是非常直观的
作者:
Gaara
时间:
2013-2-22 00:53
就是相当于你定义了一个32个字符的数组,通过while循环读取,
读一次(就是读满32个字符)打印一次,
最后打完了,hasRead这个变量就<0了,就不打了。
所以不是说只打印一次,如果没有循环的话是会打不全的。
作者:
胥文
时间:
2013-2-22 10:42
就好比定义一个数组长度那么大的容器,一次最多只能装这么多,也就限制了你一次最多只能读容器大小那么的字符
然后通过while循环类控制,你读多少,然后就取多少;
作者:
scott0610
时间:
2013-2-22 13:08
char[] cbuf=new char[32];这个缓冲数组,简单的是就是每次读取文件内容的大小,当读取的内容大于32的时候,就先将读取到的内容输出,然后再继续读取。
作者:
Gaara
时间:
2013-2-23 15:14
这个帖子 没技术分加吗?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2