public class EncryptDemo { public static void main(String[] args) throws IOException {
List<Integer> list = new ArrayList<Integer>();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("曲婉婷-我的歌声里.ape"));
int b;
while((b=bis.read())!=-1)
list.add(b^123);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("曲婉婷-我的歌声里.ape"));
for (Integer integer : list) {
bos.write(integer);
}
bis.close();
bos.close();
}
}
复制代码
刚学IO流,敲了一个这样的Copy文件的代码,里面传入的文件时一个学习笔记时,是可以Copy的,但是当我把这首歌放进去后,出现了下面的错误:
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
并且提示是list.add(b^123)时出现的错误
如果说错误是装不下的话,list这个集合的长度不是不限制的吗?而b^123得到的也是int型的,为什么会装不下
又该怎么解决呢?作者: 郑小杰 时间: 2012-8-12 22:24
把17行,"曲婉婷-我的歌声里.ape"换成"曲婉婷-我的歌声里01.ape"试一下
作者: 徐小骥 时间: 2012-8-12 22:31
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("曲婉婷-我的歌声里.ape"));//读取文件“曲婉婷-我的歌声里.ape”
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("曲婉婷-我的歌声里.ape"));//存放文件并命名“曲婉婷-我的歌声里.ape”
你这是从A文件读取一段数据写入A文件啊!你可以把存放文件的文件名改为其它的文件名,或者修改文件存放路径作者: 官文昌 时间: 2012-8-12 22:57
import java.io.*;
import java.util.*;
public class EncryptDemo { public static void main(String[] args) throws IOException {
List<Integer> list = new ArrayList<Integer>();
BufferedInputStream bis = new BufferedInputStream(new FileInputStream("曲婉婷-我的歌声里.ape"));
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("曲婉婷-我的歌声里.ape"));
byte[] bye =new byte[1024];//你都写了缓冲流了为啥不用数组呢??
int b=0;
while((b=bis.read(bye))!=-1)//有了缓冲了流就最好用read(char[] cbuf)方法,
// list.add(b^123);我没有搞懂你这句话啥意思???
list.add(b);
for (Integer integer : list) {
bos.write(integer);
}
bis.close();
bos.close();
}
}
当我们用了缓冲流时,一般就用缓冲流的方法,这样代码的效率会大大的提高~~作者: 吴小东 时间: 2012-8-13 00:42
这个程序我没有自己去写,我大概分析一下问题所在,如果有错请指出
首先 Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
这个错误是内存溢出,
提示 list.add(b^123)时出现的错误 是因为 你的list的容量已经超出了内存的容量
至于为什么会出现这种情况。。
你的程序是一直在从目标文件 A 取出数据 又在向该文件写入数据,那么就像我们说的死循环,
然而你又把读取出来的数据存放到list中那么这个list的容量就会越来越大 最后造成内存溢出。