Это довольно старый вопрос, но он все же оказался в Google как один из самых популярных хитов ...
Здесь был дан исчерпывающий ответ: http://java -performance.info / base64-производительность кодирования и декодирования /
Взяв оттуда сводку:
Суммируем свойства кодека в одной таблице.Эта таблица отсортирована по относительной производительности всех этих кодеков (быстрее сверху).
Name Max encoding Max decoding How much we can Supports byte[] -> byte[]
len len encode with -Xmx8G
Java 8 1.62 G 2 G 1.16 G Yes
javax.xml 1.62 G 2 G 1.07 G No
MiGBase64 1.62 G 0.36 G 1.07 G Yes
IHarder 1.62 G 0.72 G 1.23 G Yes
Apache 0.81 G 0.72 G 0.8 G Yes
Guava 1.62 G 2 G 1.07 G No
Sun.misc 0.79 G 1.05 G 0.78 G No
Если вы ищете быстрый и надежный кодек Base64 - не смотрите за пределы JDK.В Java 8 есть новый кодек: java.util.Base64
, а также один скрытый от многих глаз (из Java 6): javax.xml.bind.DatatypeConverter
.Оба быстры, надежны и не страдают от целочисленных переполнений.
2 из 4-х сторонних кодеков, описанных здесь, очень быстрые: MiGBase64 и IHarder.К сожалению, если вам потребуется обрабатывать сотни мегабайт за раз, только Google Guava позволит вам декодировать 2 ГБ данных за раз (360 МБ в случае MiGBase64 / 720M в случае IHarder и Apache Commons).К сожалению, Guava не поддерживает кодировку byte [] -> byte [].
Не пытайтесь вызывать String.getBytes (Charset) для больших строк, если ваша кодировка многобайтовая - вы можете получить всю гаммуисключений, связанных с целочисленным переполнением.