我有一个Base64编码的图像。Java中最好的解码方法是什么?希望只使用Sun Java 6中包含的库。
当前回答
作为sun.misc的替代品。BASE64Decoder或非核心库,请查看javax.mail.internet.MimeUtility.decode()。
public static byte[] encode(byte[] b) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
OutputStream b64os = MimeUtility.encode(baos, "base64");
b64os.write(b);
b64os.close();
return baos.toByteArray();
}
public static byte[] decode(byte[] b) throws Exception {
ByteArrayInputStream bais = new ByteArrayInputStream(b);
InputStream b64is = MimeUtility.decode(bais, "base64");
byte[] tmp = new byte[b.length];
int n = b64is.read(tmp);
byte[] res = new byte[n];
System.arraycopy(tmp, 0, res, 0, n);
return res;
}
链接与完整的代码:编码/解码到/从Base64
其他回答
从v6开始,Java SE附带JAXB。datatypeconverter有一些静态方法可以简化这一点。参见parseBase64Binary()和printBase64Binary()。
更新:JAXB不再随Java一起发布(从Java 11开始)。如果项目需要JAXB,则需要通过依赖项管理系统(例如Maven)配置相关库。如果你需要编译器(xjc.exe),你也需要单独下载。
特别是在通用Codec:类Base64解码(byte[]数组)或编码(byte[]数组)
我知道现在回答有点晚了,但对于JDK 8及以上版本。
Base64.getEncoder().encodeToString("anyStringData".getBytes());
Base64.getDecoder().decode("encodedData");
进口
import java.util.Base64;
请参考此OracleDocs !
这是一个迟来的回答,但是Joshua Bloch在java.util.prefs包下提交了他的Base64类(当他为Sun工作时,嗯,Oracle)。这个类从JDK 1.4开始就存在了。
E.g.
String currentString = "Hello World";
String base64String = java.util.prefs.Base64.byteArrayToBase64(currentString.getBytes("UTF-8"));
不需要使用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的回答。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder
- 将JSON字符串转换为HashMap