2013-03-05 206 views
-1

我想使用下面的代碼讀取圖像的字節數組,但它會引發內存不足異常。我評論了發生異常的位置。ByteArrayOutputStream拋出OutOfMemoryError

byte[] bBuffer = new byte[300000]; // 
ByteArrayBuffer baf = new ByteArrayBuffer(300000); 
int total = 0; 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
try 
{ 
    int read = 0;   
    while ((dis.read(bBuffer, 0, bBuffer.length)) != -1) { 
     baos.write(bBuffer, 0, bBuffer.length); // Exception occurs here   
     Log.d("outputImageBytes", "Reading Image Bytes: " + bBuffer.length + " " + read++); 
    } 
    //baos.flush(); 
} 
catch (Exception e) 
{ 
    Log.e("outputImageBytes", "Exception Occured while reading image bytes: " + e.getMessage()); 
    e.getMessage(); 
} 
+2

在寫入'baos'時,您忽略了'dis.read(..)'的值。它返回讀取的實際字節數,現在你總是插入緩衝區的總長度。 – 2013-03-05 11:51:57

+0

有點困惑,請問你能舉個例子嗎? :) – 2013-03-05 11:54:34

回答

1

您忽略了實際讀取的字節數量。

int numberofBytesRead=dis.read(bBuffer, 0, bBuffer.length); 
baos.write(bBuffer, 0, numberOfBytesRead); 
+0

是的,我以前這樣做,但它仍然進入OutOfMemoryError – 2013-03-05 12:42:53

+0

問題可能是,我們正在讀取和寫入相同的字節數組。 – kaysush 2013-03-05 13:04:15

+0

是的,這是我犯了一個錯誤。但即使改變後也會導致同樣的問題 – 2013-03-05 14:53:12

相關問題