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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李晓俊老师 黑马帝   /  2012-2-21 19:53  /  2489 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李晓俊 于 2012-2-22 08:42 编辑

                                FileInputStream fi = new FileInputStream("test.txt");
                byte[] buf = new byte[1024];
                int ch = 0;   //这里不懂,,为什么加一个变量ch,直接用fi.read(buf)不行么
                while((ch=fi.read(buf))!=-1)
                {
                        System.out.println(new String(buf,0,ch));
                }
                fi.close();

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

5 个回复

倒序浏览
设计一个int型变量是为了接受read()方法的返回值,read方法返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1
用返回的-1判断是否文件结束,而下面打印时分配一个新的 String,它包含取自字符数组参数一个子数组的字符,而ch代表了指定子数组的长度

评分

参与人数 1技术分 +1 收起 理由
唐秀启 + 1

查看全部评分

回复 使用道具 举报
为了获取字节的长度,输出时不会浪费资源。
回复 使用道具 举报
貌似有点懂了,但不是很清晰
回复 使用道具 举报
如果直接用fi.read(buf),那后面的new String(buf,0,ch)中的ch还得用fi.read(buf)表示,可是这样一来一次循环就调用了两次read()方法,进行了两次读取,read()方法是调用一次读取一次,我运行了一下这种情况得到的是StringIndexOutOfBoundsException.对于这个异常我就不解了
回复 使用道具 举报
哦,我明白了..
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马