黑马程序员技术交流社区

标题: 关于字节流读取数据中的一个问题 [打印本页]

作者: 李晓俊老师    时间: 2012-2-21 19:53
标题: 关于字节流读取数据中的一个问题
本帖最后由 李晓俊 于 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();
作者: 吴璞玉    时间: 2012-2-21 20:44
设计一个int型变量是为了接受read()方法的返回值,read方法返回读入缓冲区的字节总数,如果因为已经到达文件末尾而没有更多的数据,则返回 -1
用返回的-1判断是否文件结束,而下面打印时分配一个新的 String,它包含取自字符数组参数一个子数组的字符,而ch代表了指定子数组的长度
作者: 黄奇耀    时间: 2012-2-21 23:11
为了获取字节的长度,输出时不会浪费资源。
作者: 李晓俊老师    时间: 2012-2-21 23:22
貌似有点懂了,但不是很清晰
作者: 胡威    时间: 2012-2-21 23:24
如果直接用fi.read(buf),那后面的new String(buf,0,ch)中的ch还得用fi.read(buf)表示,可是这样一来一次循环就调用了两次read()方法,进行了两次读取,read()方法是调用一次读取一次,我运行了一下这种情况得到的是StringIndexOutOfBoundsException.对于这个异常我就不解了
作者: 李晓俊老师    时间: 2012-2-21 23:40
哦,我明白了..




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