黑马程序员技术交流社区

标题: 关于IO的问题 [打印本页]

作者: flynihao53    时间: 2016-3-23 21:18
标题: 关于IO的问题
用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();
推荐使用第一种,因为第二种会有内存溢出的情况,但是我想问如果对第二中每次在读取时进行一个判断,如果所读取的内容大于内存容量就转为第二种,如果读取的容量没有大于内存容量就用第一种,这样不是更好吗?还是说这样还是有浪费内存的情况?

作者: flynihao53    时间: 2016-3-23 21:19
转为第一种,上面哪儿写错了
作者: flynihao53    时间: 2016-3-23 21:20
请大家帮忙看一下




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