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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王红潮 中级黑马   /  2012-9-20 20:58  /  1290 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在书上看了一段代码,读取一个文件,并返回字节数组,有些小疑问:
  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[];的长度也就越大,如果超出了虚拟机设定的范围,会内存溢出吧,这种写法会不会有问题?

3 个回复

倒序浏览
你的代码很奇怪!稍后研究一下。
如果文件过大,首先,字节数组的长度会比文件长度小,导致文件丢失。而且有内存溢出的危险。
回复 使用道具 举报
你的代码很奇怪!稍后研究一下。
如果文件过大,首先,字节数组的长度会比文件长度小,导致文件丢失。而且有内存溢出的危险。
回复 使用道具 举报
你为什么不使用缓冲流  
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马