我正在尝试将文件转换为Base64字符串。对于小尺寸文件,它可以很好地工作,对于大于500mb的文件,它会抛出OutOfMemoryError。我要将文件转换为Base64 encodedString,因为我的服务器端需要通过Base64 encodedstring上传文件。是否可以通过此方法转换和发送500mb文件?提前谢谢。
byte[] bytes = null;
InputStream inputStream;
try {
inputStream = new FileInputStream(mFilepath);
byte[] buffer = new byte[1024];
int bytesRead;
ByteArrayOutputStream output = new ByteArrayOutputStream();
try {
while ((bytesRead = inputStream.read(buffer)) != -1) {
output.write(buffer, 0, bytesRead);
}
inputStream.close();
output.flush();
output.close();
} catch (IOException e) {
e.printStackTrace();
}
bytes = output.toByteArray();
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
// Here it throws OutOfMemoryError
String encodedString = Base64.encodeToString(bytes, Base64.DEFAULT);
然后我使用HttpURLConnection将encodedString
传递给服务器。
答案 0 :(得分:0)
对于大于500mb的文件,它会抛出OutOfMemoryError
当然。基于Java的Android应用程序的堆限制将远远小于500MB,更不用说两个数据副本,一个是扩展(Base64)格式。有数以亿计的设备甚至没有整个设备那么多的RAM,更不用说你的应用程序使用了。
是否可以通过此方法转换并发送500mb文件?
只有你可以以某种方式流式传输转换后的字节。转换少量字节,将它们写入套接字,转换下一小部分字节,将它们写入套接字,依此类推。您没有实际的方法将整个500MB文件转换为内存中的Base64并将其作为字符串传输。