程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> ByteArrayOutputStream的OutOfMemoryError錯誤

ByteArrayOutputStream的OutOfMemoryError錯誤

編輯:關於C++

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(),這個值就是數組有內容的最大下標。

 

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved