2011-05-06 96 views
19

This question with regard to JDK 5表示,沒有JDK 5提供的實現,但JDK 6應該有sun.misc.Base64Decoder僅使用JDK6進行base64解碼

據我所知,這個類沒有JDK提供,我也找不到其他類似的類

那麼,JDK6的情況如何呢?

我知道像Commons和JBoss那樣的許多實現,但我們有一個限制性的第三方lib策略,所以我試圖避免重新發明輪子。

+0

你應該等待sun.misc,它有點糾結,它很少變化,但當它確實很快。 – bestsss 2011-05-06 09:20:42

回答

10

沒有,情況沒有了Java 5和Java之間切換6.

不幸的是,在Java SE平臺沒有官方的Base64實現。 @bestsss已經證明,在Java SE 6中實際上有一個(隱藏得很好的)Base64實現(詳見他的回答),

Sun JDK附帶此類(sun.misc.Base64Decoder),但未指定,並且should not be used(尤其是因爲它不需要存在於其他實現或甚至版本中)。

如果你絕對需要避免第三方庫(Apache Commons Codec將是a Base64 implementation傳統的供應商),那麼你可能想在BSD許可(或類似)的版本複製到您的項目。有一個public domain implementation,就許可證而言,這是無痛的。

+1

感謝您的快速回復。我決定嘗試BSD許可的[MiGBase64實現](http://migbase64.sourceforge.net/)的源代碼分發。它聲稱速度非常快,佔地面積小。 – kostja 2011-05-06 08:24:33

+2

有一個正式的impl。其中2個。 – bestsss 2011-05-06 09:18:49

+3

Java在一個明智的位置不提供內置的Base64編碼器/解碼器*是完全荒謬的。 – aroth 2011-10-17 23:14:01

49

在Java中有官方(非sun.misc)實現,但它不是任何人認爲是的。

java.util.prefs.AbstractPreferences是有必要的方法來做到這一點。您必須覆蓋put方法。

還有一這是非常容易使用:

javax.xml.bind.DatatypeConverter它有利益2種方法:


澄清的base64性質AbstractPreferences:(sun.misc *)java.util.prefs.Preferences中

 
    /** 
    * Associates a string representing the specified byte array with the 
    * specified key in this preference node. The associated string is 
    * the Base64 encoding of the byte array, as defined in RFC 2045, Section 6.8, 
    * with one minor change: the string will consist solely of characters 
    * from the Base64 Alphabet; it will not contain any newline 
    * characters. Note that the maximum length of the byte array is limited 
    * to three quarters of MAX_VALUE_LENGTH so that the length 
    * of the Base64 encoded String does not exceed MAX_VALUE_LENGTH. 
    * This method is intended for use in conjunction with 
    * {@link #getByteArray}. 
    */ 
    public abstract void putByteArray(String key, byte[] value); 
+0

您如何以符合文檔的方式使用'AbstractPreferences'? JavaDoc沒有提及任何地方的Base64 * *。 – 2011-05-06 09:35:26

+1

'DatatypeConverter'看起來很棒,'雖然! – 2011-05-06 09:36:28

+0

@Joachim,關於文檔,你錯了:),我將編輯答案 – bestsss 2011-05-06 09:56:54

2

就像約阿希姆·紹爾在之前的評論已經JDK1.6捆綁了它自己的Base64編碼實現說,這裏有一個例子:

String toEncode = "Encoding and Decoding in Base64 Test"; 
//Encoding in b64 
String encoded = new BASE64Encoder().encode(toEncode.getBytes()); 
System.out.println(encoded); 
//Decoding in b64 
byte[] decodeResult = new BASE64Decoder().decodeBuffer(encoded); 
System.out.println(new String(decodeResult));