黑马程序员技术交流社区

标题: 一个关于IO流中FileReader 中的问题??? [打印本页]

作者: awkflf11    时间: 2014-3-24 23:24
标题: 一个关于IO流中FileReader 中的问题???
public class FileReaderDemo2 {
       
        public static void main(String[] args) throws IOException {
                        //1,创建读取流对象和数据源关联。
                FileReader fr = new FileReader("temp\\demo.txt");// txt内容 :abcde
               
                //2,创建一个字符数组。用于存储读到字符数据。
                char[] buffer = new char[1024];  //一般定义的都是1024的整数倍。一个char占两个字节
                 
                int len = 0;
                while((len=fr.read(buffer))!=-1){
                       
                        System.out.println(new String(buffer,0,len));
                }                       
                fr.close();
        }
}

我的想问的是:while((len=fr.read(buffer))!=-1)为什么是-1???

还有System.out.println(new String(buffer,0,len));中的new String(buffer,0,len)怎么看不懂???求解


作者: sxhs2008    时间: 2014-3-24 23:32
!= -1 的意思是,还要资源可以读取,如果是-1了就表示没有资源可以读取了,也就是读取完成了,!= -1也就是还没有读取完成,所以才会进入while中继续进行,new String(buffer,0,len)  的意思是:buffer代表char[] 数组,0代表从开头读取,len代表每次读取的byte 数 ,看下javaAPI:String(byte[] bytes, int offset, int length) 即可
作者: lwy0319    时间: 2014-3-24 23:58
read
public int read(char[] cbuf,
                int offset,
                int length)
         throws IOException将字符读入数组中的某一部分。

指定者:
类 Reader 中的 read
参数:
cbuf - 目标缓冲区
offset - 从其处开始存储字符的偏移量
length - 要读取的最大字符数
返回:
读取的字符数,如果已到达流的末尾,则返回 -1
抛出:
IOException - 如果发生 I/O 错误
以上是关于read方法在API文档当中的说明,至于为什么讲读到末尾规定为返回-1我也不知道。。
至于new String(buffer,0,len)是对应构造方法public String(char[] value,int offset,int count)其中buffer就是所要读取的字符数组内容了,然后从起点0开始,然后读到之前read方法的返回值len=fr.read(buffer)也就是这串数组的总长,顺便说下,如果你读取的内容比1024(参数内容)字节更多,那么返回值将等于char[]传递的1024,而想把完整的内容读完需要循环两次,你可以把1024改成1试试。

作者: bjfanxc    时间: 2014-3-25 12:51
去看API文档,读到结尾返回的就是-1;newString(buffer,0,len)就是将你的char数组转成字符串打印出来,方便观看。
作者: 水蓝    时间: 2014-3-25 14:36
在文件读取流中,-1是文件结束的默认标志。也就是说,没有办法读到更多的信息了。
作者: awkflf11    时间: 2014-3-25 18:00
lwy0319 发表于 2014-3-24 23:58
read
public int read(char[] cbuf,
                int offset,

嗯,,,知道了。。多谢




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2