java-可以绕过HEAP从HTTP直接将字节流写入SDCard吗?

java-可以绕过HEAP从HTTP直接将字节流写入SDCard吗?,第1张

概述我正在下载的视频文件大于给定的Android应用程序的存储空间.当它们在设备上时,MediaPlayer可以很好地处理它们,因此它们的整体大小不是问题.问题是,如果它们超过相对较小的兆字节数(可以字节[]),那么在下载它们时,我将得到可怕的OutOfMemory异常.我想要的解决方案是将传入的字节流

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

以上是内存溢出为你收集整理的java-可以绕过HEAP从HTTP直接将字节流写入SDCard吗?全部内容,希望文章能够帮你解决java-可以绕过HEAP从HTTP直接将字节流写入SDCard吗?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1076134.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存