ByteArrayOutputStream报OutOfMemoryError错误实际是分情况的
先贴代码,再来讲述
一、主要测试代码
public static byte[] mapToBytes(HashMap map){		try{			MyByteArrayOutputStream mem_out = new MyByteArrayOutputStream();			ObjectOutputStream out = new ObjectOutputStream(mem_out);	        out.writeObject(map);//位置1 danielinbiti	        out.close();	        mem_out.close();	        System.out.println("here");	        System.out.println("count="+mem_out.getCount());	        System.out.println("length="+mem_out.getBuf().length);	        byte[] bytes = mem_out.toByteArray();//位置2 danielinbiti	        return bytes;		}catch(IOException ioe){			System.out.println(ioe.getMessage());		}catch(Exception ex){			System.out.println(ex.getMessage());					}		return null;	}	public static void main(String[] args) {		HashMap map=new HashMap();		for(int i=0;i<3000000;i++){//调整该数字测试			map.put(i+"","abcdefghijklmnopqrstuvwx23sdfasdfsadfad撒的发生的法定danielinbitifasfqwefqwerqljelfq"+i);					}		byte[] bytes = mapToBytes(map);	}MyByteArrayOutputStream.java文件
public class MyByteArrayOutputStream extends ByteArrayOutputStream{    public byte[] getBuf(){//danielinbiti 因为我这测试在2个package中    	return this.buf;    }    public int getCount(){    	return this.count;    }}二、OutOfMemoryError
报出错误的位置有两个地方,分别是注释中的位置1,位置2
1、位置1的错误是因为ByteArrayOutputStream到了临界,无法再扩大数组了,因为定义的时候count是int,超出int最大范围就报错
2、位置2的错误是因为内存空间不够,无法再生成数组toByteArray,但可以直接从mem_out.getBuf()获取,当然这个数组比实际要大,因此还得看mem_out.getCount(),这个值就是数组有内容的最大下标。