我正在下载的视频文件大于提供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();
....
我很好奇另一种方法是将字节流一次一个字节,然后将其写入磁盘。
答案 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();