码迷,mamicode.com
首页 > 其他好文 > 详细

ByteArrayOutputStream的OutOfMemoryError错误

时间:2015-05-28 20:02:52      阅读:280      评论:0      收藏:0      [点我收藏+]

标签:outofmemoryerror   bytearrayoutputstrea   tobytearray   objectoutputstream   

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(),这个值就是数组有内容的最大下标。



ByteArrayOutputStream的OutOfMemoryError错误

标签:outofmemoryerror   bytearrayoutputstrea   tobytearray   objectoutputstream   

原文地址:http://blog.csdn.net/danielinbiti/article/details/46126385

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!