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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 神秘人F 中级黑马   /  2014-9-19 18:40  /  1259 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 神秘人F 于 2014-9-20 09:30 编辑

FileReader从文件中读取数据,其中有个方法是建立一个char[],然后用read方法将读取到的数据存放在char[]中,大家基本都是这么写的

char[] a=new char[1024];
int len=0;
while((len=fr.read(a))!=-1){
System.out.println(new String(a,0,len));
}
我就想问一下如果char[1024]都装满了,文件中的数据还没有读完,那么剩下的数据还会重新装入char[]中吗?

9 个回复

倒序浏览
对的,就目前你这个代码来看,是会循环把数据装到char[] 数组里面的,
所以一般情况下,会用到临时变量,就是把读取到的数据添加到临时变量里面,
如String temp="";
while((len=fr.read(a))!=-1){
temp+=new String(a,0,len);//把数据添加到字符串里面
}

或者用StringBuilder接收
代码是这样的 :
StringBuilder builder=new StringBuilder();

while((len=fr.read(a))!=-1){
builder.append(new String(a,0,len));//把数据追加到原数据里面
}

然后使用StringBuilder的toString()方法得到所有已经接收的数据
这样使用
System.out.println(builder.toString());

当然要是只是打印出来的话,你的代码已经实现了打印出全部内容的功能了.

回复 使用道具 举报
你也可以1024的倍数,1024*n;这个问题好像毕老师是讲过,记不清了!
回复 使用道具 举报
char[1024]就相当于一个盒子,每次最多装1024(当然你可以自己设置箱子的大小最好是1024的倍数),取完后会再次重新装,直到把流中数据取完。
回复 使用道具 举报
就像一辆车运东西,它会一直来回的运,直到读到结束标记-1就不运了
回复 使用道具 举报
对,1024.是一次所装的。也可以是1024的倍数。
回复 使用道具 举报
再补充一句,如果文件读完就会返回-1.
回复 使用道具 举报
sean 中级黑马 2014-9-19 23:32:10
8#
liaorubei 发表于 2014-9-19 19:02
对的,就目前你这个代码来看,是会循环把数据装到char[] 数组里面的,
所以一般情况下,会用到临时变量,就是把 ...

我用IO流代码将C盘的图片(大小1,361,591字节)复制到D盘 图片却成了(172,471,133字节)变大了好多
而且图片也打不开,这是怎么回事?
回复 使用道具 举报
是的 装满了就会从新装载
回复 使用道具 举报
sean 发表于 2014-9-19 23:32
我用IO流代码将C盘的图片(大小1,361,591字节)复制到D盘 图片却成了(172,471,133字节)变大了好多
而且 ...

如果是图片就不要用这个字符流了,而是应该使用字节流,
然后对应的接收类型应该是byte[]数组,而不应该是char[]数组.
文件复制和文本复制的方式有点不一样的哦
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马