如何解决尝试使用 BufferedInputStream 和 Base64 在 Java 中对大文件进行编码
我是 Java I/O 的新手,所以请帮忙。
我正在尝试使用 apache commons 库处理一个大文件(例如 50mb 的 pdf 文件)。 起初我尝试:
byte[] bytes = FileUtils.readFiletoByteArray(file);
String encodeBase64String = Base64.encodeBase64String(bytes);
byte[] decoded = Base64.decodeBase64(encodeBase64String);
但是知道
org.apache.commons.io
中的 FileUtils.readFiletoByteArray 会将整个文件加载到内存中,我尝试使用 BufferedInputStream
逐个读取文件:
BufferedInputStream bis = new BufferedInputStream(inputStream);
StringBuilder pdfStringBuilder = new StringBuilder();
int byteArraySize = 10;
byte[] tempByteArray = new byte[byteArraySize];
while (bis.available() > 0) {
if (bis.available() < byteArraySize) { // reaching the end of file
tempByteArray = new byte[bis.available()];
}
int len = Math.min(bis.available(),byteArraySize);
read = bis.read(tempByteArray,len);
if (read != -1) {
pdfStringBuilder.append(Base64.encodeBase64String(tempByteArray));
} else {
System.err.println("End of file reached.");
}
}
byte[] bytes = Base64.decodeBase64(pdfStringBuilder.toString());
然而,2个解码后的字节数组看起来不太一样... ...实际上,只给出了10个字节,这是我的临时数组大小... ...
任何人都可以帮忙:
提前致谢:)
解决方法
经过一番挖掘,发现字节数组的大小必须是 3 的倍数,以避免填充。使用3的倍数的临时数组大小后,程序就可以通过了。
我只是改变了
int byteArraySize = 10;
成为
int byteArraySize = 1024 * 3;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。