This question with regard to JDK 5说,JDK 5没有提供实现,但JDK 6应该有sun.misc.Base64Decoder
。
据我所知,这个类没有提供JDK,我也找不到任何其他类似的类
那么,JDK6的情况如何呢?
我知道有许多实现,比如Commons和JBoss,但我们有一个限制性的第三方lib策略,所以我试图避免重新发明轮子。
答案 0 :(得分:54)
Java中有官方(非sun.misc
)实现,但并不是人们想象的那样。
java.util.prefs.AbstractPreferences
是拥有必要方法的人。您必须覆盖put
方法。
还有一个更容易使用:
javax.xml.bind.DatatypeConverter
它有两种感兴趣的方法:
public static byte[] parseBase64Binary( String lexicalXSDBase64Binary )
public static String printBase64Binary( byte[] val )
澄清AbstractPreferences的base64性质: 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);
答案 1 :(得分:10)
不,Java 5和Java 6之间的情况没有变化。
不幸的是,Java SE平台上没有正式的Base64实现。 @bestsss已经证明 实际上是Java SE中一个(隐藏的)Base64实现6(详见他的答案)。
Sun JDK附带此类(sun.misc.Base64Decoder
),但未指定,should not be used(特别是因为在其他实现甚至版本中不需要它)。
如果您绝对需要避免使用第三方库(Apache Commons Codec将是a Base64 implementation的传统提供程序),那么您可能希望将BSD(或类似的)许可版本复制到项目中。当涉及到许可证时,有一个public domain implementation并且就像它获得的一样轻松。
答案 2 :(得分:5)
就像Joachim Sauer在之前的评论中所说的那样,JDK1.6已经捆绑了它自己的Base64实现(sun.misc。*),这是一个例子:
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));
答案 3 :(得分:2)
我使用了byte[] decodedValue = DatatypeConverter.parseBase64Binary(value);
这个网站很好地解释了: https://www.rgagnon.com/javadetails/java-0598.html
摘录:
public static String encode(String value) throws Exception {
return DatatypeConverter.printBase64Binary
(value.getBytes(StandardCharsets.UTF_8)); // use "utf-8" if java 6
}
public static String decode(String value) throws Exception {
byte[] decodedValue = DatatypeConverter.parseBase64Binary(value);
return new String(decodedValue, StandardCharsets.UTF_8); // use "utf-8" if java 6
}