黑马程序员技术交流社区

标题: 看得有点晕了,请教下关于一个小程序的问题 [打印本页]

作者: 莫嘉伟    时间: 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