3

我正在下载的视频文件大于 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();
....     

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

4

1 回答 1

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();
于 2013-09-15T03:13:08.717 回答