Какая библиотека Java является самой быстрой для изображений кодирования Base64? - PullRequest
3 голосов
/ 30 ноября 2011

В настоящее время я использую ByteArrayOutputStream, чтобы преобразовать BufferedImage в byte [], а затем класс с открытым исходным кодом Base64Coder, чтобы преобразовать byte [] в char [] и затем добавить в строку. Это один из этапов многоэтапного процесса кодирования наборов кадров видео и их перевода в формат XML. Не спрашивайте, почему я это делаю, это то, что нужно сделать.

Я вижу, что кодировка Base64 отнимает ~ 75% процессорного времени всего процесса, и, видя, как только я отобрал этот случайный класс из поиска в Google, я уверен, что есть что-то более эффективное для кодирования изображений , Какие у меня варианты, ребята?

Ответы [ 2 ]

3 голосов
/ 06 ноября 2017

Это довольно старый вопрос, но он все же оказался в 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) для больших строк, если ваша кодировка многобайтовая - вы можете получить всю гаммуисключений, связанных с целочисленным переполнением.

0 голосов
/ 30 ноября 2011

Попробуйте commons-codec библиотеки на http://commons.apache.org/codec/ и обязательно сообщите нам результаты.Это стандартная и широко используемая библиотека.

Класс, который вы ищете: org.apache.commons.codec.binary.Base64 http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html

...