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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© flynihao53 中级黑马   /  2016-3-23 21:18  /  532 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

用IO流复制文件有两种方法:
第一种如下:
FileInputStream fis = new FileInputStream("21.jpg");     //创建输入流对象
  FileOutputStream fos = new FileOutputStream("copy.jpg"); //创建输出流对象
  
  int b;
  while((b = fis.read()) != -1){    //在不断的读取每一个字节
  fos.write(b);                   //将每个字节写出
  }
  
  fis.close();                     //关流释放资源
  fos.close();
}

第二种如下:
FileInputStream fis = new FileInputStream("周杰伦 - 红尘客栈 - 正式版.mp3");     //创建输入流对象
  FileOutputStream fos = new FileOutputStream("周杰伦 - 红尘客栈 - 复制版.mp3"); //创建输出流对象
  //int len = fis.available();
  //System.out.println(len);
  
  byte[] arr = new byte[fis.available()];   //创建与文件一样大小的字节数组
  fis.read(arr);                            //将文件上的字节读取到内存中
  fos.write(arr);                           //将字节数组中的字节数据写到文件上
  
  fis.close();                     //关流释放资源
  fos.close();
推荐使用第一种,因为第二种会有内存溢出的情况,但是我想问如果对第二中每次在读取时进行一个判断,如果所读取的内容大于内存容量就转为第二种,如果读取的容量没有大于内存容量就用第一种,这样不是更好吗?还是说这样还是有浪费内存的情况?

2 个回复

倒序浏览
转为第一种,上面哪儿写错了
回复 使用道具 举报
请大家帮忙看一下
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马