У меня есть много файлов PDF, которые мне нужно получить, чтобы его содержимое закодировано с помощью base64. У меня есть приложение Akka, которое извлекает файлы в виде потока и распределяет для многих работников для кодирования этих файлов и возвращает строку base64 для каждого файла. Я получил базовое решение для кодирования:Java-буферизированный 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.
Любой вход действительно полезен. Спасибо!
Что значит «с буфером». Что будет вводить, и что вы ожидаете от вывода? Поток? Канал? Строка? – RealSkeptic
Вход представляет собой InputStream, выход представляет собой содержимое строки base64. Буфером будет BufferedReader. –