仅使用JDK6进行Base64解码

时间:2011-05-06 08:10:23

标签: base64 java

This question with regard to JDK 5说,JDK 5没有提供实现,但JDK 6应该有sun.misc.Base64Decoder

据我所知,这个类没有提供JDK,我也找不到任何其他类似的类

那么,JDK6的情况如何呢?

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

4 个答案:

答案 0 :(得分:54)

Java中有官方(非sun.misc)实现,但并不是人们想象的那样。

java.util.prefs.AbstractPreferences是拥有必要方法的人。您必须覆盖put方法。

还有一个更容易使用:

javax.xml.bind.DatatypeConverter它有两种感兴趣的方法:


澄清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
   }