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