仅使用 JDK6 的 Base64 解码

2022-09-01 18:02:43

关于JDK 5的这个问题说,JDK 5没有提供任何实现,但JDK 6应该有一个.sun.misc.Base64Decoder

据我所知,这个类没有随JDK一起提供,我无法在其中
找到任何其他类似的类,
那么,JDK6的情况如何?

我知道有很多实现,比如Commons和JBoss,但是我们有一个限制性的第三方lib政策,所以我试图避免重新发明轮子。


答案 1

Java中有官方的(非)实现,但它不是任何人想象的地方。sun.misc

java.util.prefs.AbstractPreferences是具有执行此操作的必要方法的那个。您必须重写方法。put

还有一个更容易使用:

javax.xml.bind.DatatypeConverter 它有2个有趣的方法:


澄清 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);

答案 2

不,在Java 5和Java 6之间,情况没有改变。

不幸的是,Java SE平台中没有官方的Base64实现。@bestsss已经表明,在Java SE 6中实际上有一个(隐藏得很好的)Base64实现(有关详细信息,请参阅他的答案)。

Sun JDK 附带了此类 (),但未指定,也不应使用(特别是因为它不需要存在于其他实现甚至版本中)。sun.misc.Base64Decoder

如果你绝对需要避免第三方库(Apache Commons Codec将是Base64实现的传统提供者),那么你可能想要将BSD(或类似的)许可版本复制到你的项目中。有一个公共领域的实现,当涉及到许可证时,它几乎是无痛的。


推荐