热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java能否直接通过HTTP将字节流绕过HEAP写入SD卡?

我正在下载的视频文件大于给定的Android应用程序的存储空间.当它们在设备上时,MediaPlayer可以很好地处理它们,因此它们的整体大小不是问题.问题是,如果它们超过相对较小的兆字节数(可以字节

我正在下载的视频文件大于给定的Android应用程序的存储空间.当它们在设备上时,MediaPlayer可以很好地处理它们,因此它们的整体大小不是问题.
问题是,如果它们超过相对较小的兆字节数(可以字节[]),那么在下载它们时,我将得到可怕的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();
....

我很好奇另一种方法是一次获取一个字节流并将其写入磁盘.

解决方法:

您应该能够使用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();


推荐阅读
author-avatar
王漻_957
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有