A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© awkflf11 中级黑马   /  2014-3-24 23:24  /  1914 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

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)怎么看不懂???求解

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

5 个回复

倒序浏览
!= -1 的意思是,还要资源可以读取,如果是-1了就表示没有资源可以读取了,也就是读取完成了,!= -1也就是还没有读取完成,所以才会进入while中继续进行,new String(buffer,0,len)  的意思是:buffer代表char[] 数组,0代表从开头读取,len代表每次读取的byte 数 ,看下javaAPI:String(byte[] bytes, int offset, int length) 即可

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
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试试。

评分

参与人数 1技术分 +2 收起 理由
朱神必 + 2

查看全部评分

回复 使用道具 举报
去看API文档,读到结尾返回的就是-1;newString(buffer,0,len)就是将你的char数组转成字符串打印出来,方便观看。

评分

参与人数 1技术分 +1 收起 理由
朱神必 + 1

查看全部评分

回复 使用道具 举报
在文件读取流中,-1是文件结束的默认标志。也就是说,没有办法读到更多的信息了。
回复 使用道具 举报
lwy0319 发表于 2014-3-24 23:58
read
public int read(char[] cbuf,
                int offset,

嗯,,,知道了。。多谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马