是否可以绕过HEAP将字节流直接写入SDCard?

时间:2013-09-15 02:18:48

标签: java android stream out-of-memory sd-card

我正在下载的视频文件大于提供Android应用程序的内存空间。当他们在设备上*时,MediaPlayer可以非常好地处理它们,因此它们的整体尺寸不是问题。 问题是,如果它们超过了byte []的相对较小的兆字节数,那么当我下载它时,我会遇到可怕的OutOfMemory异常。

我想要的解决方案就是将输入的字节流直接写入SD卡,但是,我正在使用Apache Commons库,我正在尝试将其整个视频读入之前回到我的身边。

我的代码如下所示:

HttpClient client = new HttpClient();
    PostMethod filePost = new PostMethod(URL_PATH);
    client.setConnectionTimeout(timeout);
    byte [] ret ;
    try{                        
        if(nvpArray != null)
            filePost.setRequestBody(nvpArray);                   
    }catch(Exception e){
        Log.d(TAG, "download failed: " + e.toString());
    }              
    try{            
        responseCode = client.executeMethod(filePost);          
        Log.d(TAG,"statusCode>>>" + responseCode);
        ret = filePost.getResponseBody();
....     

我很好奇另一种方法是将字节流一次一个字节,然后将其写入磁盘。

1 个答案:

答案 0 :(得分:3)

您应该能够使用PostMethod对象的GetResponseBodyAsStream方法并将其传输到文件。这是一个未经考验的例子......

InputStream inputStream = filePost.getResponseBodyAsStream();
FileInputStream outputStream = new FileInputStream(destination);

// Per your question the buffer is set to 1 byte, but you should be able to use
// a larger buffer.
byte[] buffer = new byte[1]; 
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1)
{
    outputStream.write(buffer, 0, bytesRead);
}

outputStream.close();
inputStream.close();