黑马程序员技术交流社区
标题:
关于字节流读取数据中的一个问题
[打印本页]
作者:
李晓俊老师
时间:
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