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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王怡然 黑马帝   /  2012-5-12 00:13  /  1873 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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. 为何我给这文件加密会报这异常?我看不明白;
复制代码

4 个回复

正序浏览
看错误信息,是报内存溢出,java VM默认的内存是200M,你要加密的视频大小一定超过了200M。
回复 使用道具 举报
楼主代码报的是OutOfMemoryError异常,从楼主提供的代码可以看出楼主是要把一个文件数据通过简单的加密然后存到新的文件中,利用一个数对同一个数异或两次是其本身的原理来实现。但是楼主的文件过大,而又是把所有数据加密存储到集合中再写入文件,这样的话需要存储加密数据的集合空间就要求很大,造成内存溢出或没有可用的内存提供给垃圾回收器时,Java 虚拟机无法分配一个对象,这时就抛出该异常。所以建议加密部分数据就写出去,这样内存压力会得到缓解。
回复 使用道具 举报
天道酬勤 发表于 2012-5-12 00:17
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("加勒比海盗4"));

04.          ...

我写的明明白白的,为了简单的加密,我就搞了一个大的文件,结果就报那错.
回复 使用道具 举报
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();
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马