【发布时间】:2016-08-22 14:59:20
【问题描述】:
我有很多 PDF 文件,我需要使用 base64 对其内容进行编码。我有一个 Akka 应用程序,它将文件作为流获取并分发给许多工作人员以对这些文件进行编码并为每个文件返回字符串 base64。我有一个基本的编码解决方案:
org.apache.commons.codec.binary.Base64InputStream;
...
Base64InputStream b64IStream = null;
InputStreamReader reader = null;
BufferedReader br = null;
StringBuilder sb = new StringBuilder();
try {
b64IStream = new Base64InputStream(input, true);
reader = new InputStreamReader(b64IStream);
br = new BufferedReader(reader);
String line;
while ((line = br.readLine()) != null) {
sb.append(line);
}
} finally {
if (b64IStream != null) {
b64IStream.close();
}
if (reader != null) {
reader.close();
}
if (br != null) {
br.close();
}
}
它有效,但我想知道使用缓冲区对文件进行编码的最佳方式是什么,以及是否有更快的替代方案。
我测试了一些其他方法,例如:
- Base64.getEncoder
- sun.misc.BASE64Encoder
- Base64.encodeBase64
- javax.xml.bind.DatatypeConverter.printBase64
- com.google.guava.BaseEncoding.base64
他们更快,但他们需要整个文件,对吗?另外,我不想在编码 1 个 PDF 文件时阻塞其他线程。
任何输入都非常有帮助。谢谢!
【问题讨论】:
-
你是什么意思“有缓冲区”。输入将是什么,您期望输出是什么?流?一个频道?一个字符串?
-
输入为InputStream,输出为base64字符串内容。缓冲区将是 BufferedReader。
标签: java encoding base64 bufferedinputstream