2011-11-30 77 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