黑马程序员技术交流社区

标题: IO中遇到的小疑问 [打印本页]

作者: 王红潮    时间: 2012-9-20 20:58
标题: IO中遇到的小疑问
在书上看了一段代码,读取一个文件,并返回字节数组,有些小疑问:
  1. private byte[] getBytes(String filename) throws IOException{
  2. File file = new File(filename);
  3. long len = file.length();
  4. byte[] raw = new byte[(int)len]; //这里如果强转成int类型,如果文件过大,会不会丢失
  5. try(
  6. FileInputStream fin = new FileInputStream(file))
  7. {
  8. int r = fin.read(raw);
  9. if(r != len)
  10. throw new IOException("无法读取全部文件 :" + r + " != " + len);
  11. return raw;
  12. }

  13. }
复制代码
long len = file.length();
byte[] raw = new byte[(int)len]; //这里如果强转成int类型,如果文件过大,会不会丢失
到现在才知道,数组的长度最大就是Integer.MAX_VALUE,这里如果将long类型强转成int类型,如果文件过大,应该会丢失
如果文件过大,new byte[];的长度也就越大,如果超出了虚拟机设定的范围,会内存溢出吧,这种写法会不会有问题?

作者: 梁志冰    时间: 2012-9-20 22:08
你的代码很奇怪!稍后研究一下。
如果文件过大,首先,字节数组的长度会比文件长度小,导致文件丢失。而且有内存溢出的危险。
作者: 梁志冰    时间: 2012-9-20 22:08
你的代码很奇怪!稍后研究一下。
如果文件过大,首先,字节数组的长度会比文件长度小,导致文件丢失。而且有内存溢出的危险。
作者: 李健_8    时间: 2012-9-20 23:36
你为什么不使用缓冲流  




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