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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

Java代码

  • BufferedInputStream  in = new BufferedInputStream(new FileInputStream("oneFile"));   
  • BufferedOutputStream  out = new BufferedOutputStream(new FileOutputStream("oneFile_copy"));   
  • ArrayList content = new ArrayList();   
  • byte[] data = new byte[1024];   
  •                
  • while(in.read(data) != -1) {   
  • content.add(data);   
  • }   
  • for(int i=0; i<content.size(); i++) {   
  • out.write((byte[])content.get(i));   
  • }  
这样新生成的oneFile_copy文件大小和原文件一样,可里面的内容却只是不断重复"oneFile"中一部分内容。把while循环中的写成下面这样:

Java代码

  • while(in.read(data) != -1) {   
  • content.add(data);   
  • data = null;   
  • data = new byte[1024];   
  • }  

while(in.read(data) != -1) {content.add(data);data = null;data = new byte[1024];}
之后新生成的文件内容就没有问题了。
小弟不解的就是为什么前一种写法会不行,不重新new data对象为什么就会得到重复的部分数据

2 个回复

正序浏览
data=null;是释放之前的数组占用的空间;data=new byte [1024] ;是创建一个新数组
在做这些是为了初始化数组,清空里面的元素
不清空的话数组里面有元素先直接返回元素,没有的话才会在文件中读取数组放到数组中,再返回
所以才会一直重复

回复 使用道具 举报
6.while(in.read(data) != -1) {   
7.content.add(data);
  
8.}  
就像你写的如果上面缺少下面代码
3.data = null;   
4.data = new byte[1024];   
那么你的数组里存的永远是以前的内容,所以也就出现内容重复了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马