仅使用 JDK6 的 Base64 解码
关于JDK 5的这个问题说,JDK 5没有提供任何实现,但JDK 6应该有一个.sun.misc.Base64Decoder
据我所知,这个类没有随JDK一起提供,我无法在其中
找到任何其他类似的类,
那么,JDK6的情况如何?
我知道有很多实现,比如Commons和JBoss,但是我们有一个限制性的第三方lib政策,所以我试图避免重新发明轮子。
关于JDK 5的这个问题说,JDK 5没有提供任何实现,但JDK 6应该有一个.sun.misc.Base64Decoder
据我所知,这个类没有随JDK一起提供,我无法在其中
找到任何其他类似的类,
那么,JDK6的情况如何?
我知道有很多实现,比如Commons和JBoss,但是我们有一个限制性的第三方lib政策,所以我试图避免重新发明轮子。
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 )
澄清 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);
不,在Java 5和Java 6之间,情况没有改变。
不幸的是,Java SE平台中没有官方的Base64实现。@bestsss已经表明,在Java SE 6中实际上有一个(隐藏得很好的)Base64实现(有关详细信息,请参阅他的答案)。
Sun JDK 附带了此类 (),但未指定,也不应使用(特别是因为它不需要存在于其他实现甚至版本中)。sun.misc.Base64Decoder
如果你绝对需要避免第三方库(Apache Commons Codec将是Base64实现的传统提供者),那么你可能想要将BSD(或类似的)许可版本复制到你的项目中。有一个公共领域的实现,当涉及到许可证时,它几乎是无痛的。