ByteArrayOutputStream的RAM内存的Extream使用

所以我的问题听起来像这样。我需要做一个文件的base64编码字符串,对于这一点,我用这个方法:ByteArrayOutputStream的RAM内存的Extream使用

public String getStringFile(File f) { 

InputStream inputStream = null;

String encodedFile= "", lastVal;

try {

inputStream = new FileInputStream(f.getAbsolutePath());

byte[] buffer = new byte[10240];

int bytesRead;

ByteArrayOutputStream output = new ByteArrayOutputStream();

Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);

while ((bytesRead = inputStream.read(buffer)) != -1) {

output64.write(buffer, 0, bytesRead);

}

output64.close();

encodedFile = output.toString();

} catch (Exception e) {

e.printStackTrace();

}

lastVal = encodedFile;

return lastVal;

}

和的事情是,当我尝试编码文件的东西约20 MB(确切的文件大小为19,35 MB )我得到一个OutOfMemoryException。

前:

后:

什么我做错了,我怎么能解决这个问题?提前致谢。

回答:

ByteArrayOutputStream output = new ByteArrayOutputStream(); 

Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);

如果你自己上传的base64与HttpURLConnection的你可以做的方式与ByteArrayOutputStream和替换以上线路-while直接与

OutputStream output = con.getOutputStream(); 

Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);

未经检验uploading-。

你也可以直接使用Base64编码对课程的FileOutputStream

OutputStream output = new FileOutputStream(......); 

Base64OutputStream output64 = new Base64OutputStream(output, Base64.DEFAULT);

然后用POJO上传该文件。

回答:

我在做什么错

您正在尝试编码使用Base64转换成字符串一个大约20MB的文件。许多Android设备上没有足够的堆空间来分配大量内存。

我怎样才能解决这个问题?

如果“这个问题”是“创建一个~26MB的base64编码数据字符串”,没有可靠的方法来做到这一点。通过创建这样一个字符串,您将不得不寻找其他解决方案解决您正在尝试解决的任何问题。

以上是 ByteArrayOutputStream的RAM内存的Extream使用 的全部内容, 来源链接: utcz.com/qa/267066.html

回到顶部