我有一个Base64编码的图像。Java中最好的解码方法是什么?希望只使用Sun Java 6中包含的库。


当前回答

如果你喜欢基于性能的解决方案,那么你可以使用“MiGBase64”

http://migbase64.sourceforge.net/

public class Base64Test {
    public static void main(String[] args) {
    String encodeToString = Base64.encodeToString("JavaTips.net".getBytes(), true);
    System.out.println("encodeToString " + encodeToString);
    byte[] decodedBytes = Base64.decode(encodeToString.getBytes());
    System.out.println("decodedBytes " + new String(decodedBytes));
    }
}

其他回答

特别是在通用Codec:类Base64解码(byte[]数组)或编码(byte[]数组)

你可以简单地试试这个。

byte[] data = Base64.getDecoder().decode(base64fileContent);

Base64. getdecode()返回一个可以解码的Base64解码器。然后你需要再次使用.decode(<your base64>)解码。

如果你喜欢基于性能的解决方案,那么你可以使用“MiGBase64”

http://migbase64.sourceforge.net/

public class Base64Test {
    public static void main(String[] args) {
    String encodeToString = Base64.encodeToString("JavaTips.net".getBytes(), true);
    System.out.println("encodeToString " + encodeToString);
    byte[] decodedBytes = Base64.decode(encodeToString.getBytes());
    System.out.println("decodedBytes " + new String(decodedBytes));
    }
}

从v6开始,Java SE附带JAXB。datatypeconverter有一些静态方法可以简化这一点。参见parseBase64Binary()和printBase64Binary()。

更新:JAXB不再随Java一起发布(从Java 11开始)。如果项目需要JAXB,则需要通过依赖项管理系统(例如Maven)配置相关库。如果你需要编译器(xjc.exe),你也需要单独下载。

不需要使用commons——Sun在Java中附带了base64编码器。你可以这样导入它:

import sun.misc.BASE64Decoder;

然后像这样使用它:

BASE64Decoder decoder = new BASE64Decoder();
byte[] decodedBytes = decoder.decodeBuffer(encodedBytes);

其中encodedBytes是java.lang.String或java.io.InputStream。只是要当心太阳。*类不是Sun的“官方支持”。

编辑:谁能想到这将是我发表过的最具争议的答案呢?我知道太阳。*不支持或保证软件包继续存在,我确实了解Commons并一直在使用它。然而,发帖者要求一个“包含在Sun Java 6中”的类,这就是我试图回答的问题。总的来说,我同意Commons是最好的方式。

编辑2:正如amir75在下面指出的那样,Java 6+附带了JAXB,其中包含支持的编码/解码Base64的代码。请看下面Jeremy Ross的回答。