黑马程序员技术交流社区

标题: 异常,求解释. [打印本页]

作者: 王怡然    时间: 2012-5-12 00:13
标题: 异常,求解释.
  1. public class ExerciseMy01 {
  2.         public static void main(String[] args) throws IOException {
  3.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream("加勒比海盗4"));
  4.                 List<Integer> list = new ArrayList<Integer>();
  5.                 int b;
  6.                 while ((b = bis.read()) != -1)
  7.                         list.add(b ^ 123);
  8.                 bis.close();
  9.                
  10.                 BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("新加勒比海盗4"));
  11.                 for (Integer i : list){
  12.                         bos.write(i);
  13.                 }
  14.                 bos.close();
  15.         }

  16. }

  17. 为何我给这文件加密会报这异常?我看不明白;
复制代码

作者: 何阳    时间: 2012-5-12 00:17
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("加勒比海盗4"));

04.                List<Integer> list = new ArrayList<Integer>();

05.                int b;

06.                while ((b = bis.read()) != -1)//此处返回的是字节不是int对象,read只写最低8位。
07.                        list.add(b ^ 123);//不知道你异或123干嘛?
08.                bis.close();

作者: 王怡然    时间: 2012-5-12 00:26
天道酬勤 发表于 2012-5-12 00:17
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("加勒比海盗4"));

04.          ...

我写的明明白白的,为了简单的加密,我就搞了一个大的文件,结果就报那错.
作者: 杨鹏    时间: 2012-5-12 08:45
楼主代码报的是OutOfMemoryError异常,从楼主提供的代码可以看出楼主是要把一个文件数据通过简单的加密然后存到新的文件中,利用一个数对同一个数异或两次是其本身的原理来实现。但是楼主的文件过大,而又是把所有数据加密存储到集合中再写入文件,这样的话需要存储加密数据的集合空间就要求很大,造成内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时就抛出该异常。所以建议加密部分数据就写出去,这样内存压力会得到缓解。
作者: 魏涞    时间: 2012-5-12 09:13
看错误信息,是报内存溢出,java VM默认的内存是200M,你要加密的视频大小一定超过了200M。




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