ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-11-22 20:14:05  阅读:231  来源: 互联网

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


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

标签:sd-card,out-of-memory,stream,java,android
来源: https://codeday.me/bug/20191122/2062308.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有