Base64编码文件和OutOfMemory错误

时间:2013-11-18 14:35:17

标签: android zip base64 out-of-memory

我有.zip文件,我必须在上传到服务器之前进行Base64编码。给定文件最大可达20 MB,这会导致OutOfMemory异常。  我使用这段代码:

public String encodeZipToBase64(File zip) {

    StringBuffer sb = new StringBuffer();

    byte fileContent[] = new byte[1024];
    try 
    {
        FileInputStream fin = new FileInputStream(zip);
        while(fin.read(fileContent) >= 0) {
             sb.append(Base64.encodeToString(fileContent, Base64.DEFAULT)); //exception here
        }
    } catch(OutOfMemoryError e) {
        e.printStackTrace();
    } catch (FileNotFoundException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

    return sb.toString();

}

附加到StringBuilder时发生异常。我该怎么做才能解决它?

谢谢!

1 个答案:

答案 0 :(得分:2)

您应该将HTTP请求OutputStream作为参数传递并直接在读取循环内写入,而不是将整个请求缓存为内存中的StringBuilder