2011-11-30 30 views
2

我目前使用ByteArrayOutputStream将BufferedImage转换为byte [],然后使用开源类Base64Coder将byte []转换为char [],然后将其附加到String。这是编码视频帧集并将它们置于XML友好格式的多步骤过程的一部分。不要问我为什么要这样做,那只是需要做的。什么是Base64编码图像最快的Java库?

我看到Base64编码占用整个过程的CPU时间〜75%,并且看到我刚刚从谷歌搜索中抓取这个随机类,我确信有更高效的编码图片。我有什么选择家伙?

+1

比什么效率更高?给算法,或者我们不能告诉你你可以改进什么。 –

+0

看看这里:http://stackoverflow.com/questions/469695/decode-base64-data-in-java 有点类似... –

+0

我已经告诉过你的课,Base64Coder,它是第一个结果谷歌搜索...... – Marty

回答

1

这是一个很古老的问题,但它仍然在谷歌翻起来排名靠前的一个...

这已经在这里全面地回答说: http://java-performance.info/base64-encoding-and-decoding-performance/

从那里以总结:

让我们总结在一个表中的编解码器的性能。该表按照所有这些编解码器的相对性能排序(更快)。

 
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。两者都是快速可靠的,不会受到整数溢出的影响。

这里描述的4个第三方编解码器中有2个非常快:MiGBase64和IHarder。不幸的是,如果您需要一次处理数百兆字节,只有谷歌Guava将允许您一次解码2G数据(对于IHarder和Apache Commons,在MiGBase64/720M的情况下为360MB)。不幸的是,Guava不支持byte [] - > byte []编码。

不要尝试调用String.getBytes(字符集)上巨大的字符串,如果你的字符集是多字节一个 - 你可能会得到整数溢出有关的异常的全部灰阶。

0

尝试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

+0

我会尝试一下,谢谢 – Marty

+1

相同的处理时间是什么我已经使用,与公共图书馆肯定是更多的功能,虽然到。猜猜这就是那么好,哦,好吧。 – Marty