2013-03-05 40 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

相关问题