This question with regard to JDK 5表示,沒有JDK 5提供的實現,但JDK 6應該有sun.misc.Base64Decoder
。僅使用JDK6進行base64解碼
據我所知,這個類沒有JDK提供,我也找不到其他類似的類
那麼,JDK6的情況如何呢?
我知道像Commons和JBoss那樣的許多實現,但我們有一個限制性的第三方lib策略,所以我試圖避免重新發明輪子。
This question with regard to JDK 5表示,沒有JDK 5提供的實現,但JDK 6應該有sun.misc.Base64Decoder
。僅使用JDK6進行base64解碼
據我所知,這個類沒有JDK提供,我也找不到其他類似的類
那麼,JDK6的情況如何呢?
我知道像Commons和JBoss那樣的許多實現,但我們有一個限制性的第三方lib策略,所以我試圖避免重新發明輪子。
沒有,情況沒有了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,就許可證而言,這是無痛的。
在Java中有官方(非sun.misc
)實現,但它不是任何人認爲是的。
java.util.prefs.AbstractPreferences
是有必要的方法來做到這一點。您必須覆蓋put
方法。
還有一這是非常容易使用:
javax.xml.bind.DatatypeConverter
它有利益2種方法:
public static byte[] parseBase64Binary(String lexicalXSDBase64Binary)
public static String printBase64Binary(byte[] val)
澄清的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);
您如何以符合文檔的方式使用'AbstractPreferences'? JavaDoc沒有提及任何地方的Base64 * *。 – 2011-05-06 09:35:26
'DatatypeConverter'看起來很棒,'雖然! – 2011-05-06 09:36:28
@Joachim,關於文檔,你錯了:),我將編輯答案 – bestsss 2011-05-06 09:56:54
就像約阿希姆·紹爾在之前的評論已經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));
你應該等待sun.misc,它有點糾結,它很少變化,但當它確實很快。 – bestsss 2011-05-06 09:20:42