哪个Java库提供base64编码/解码?

87

我想知道哪个库可用于base64编码/解码?我需要此功能足够稳定以供生产使用。


3
在提问之前你可以先搜索一下。只需在谷歌上搜索“java base64”即可。 - Mohammad Dehghan
4个回答

295

Java 9

请使用Java 8的解决方案。请注意,DatatypeConverter仍然可以使用,但现在它在java.xml.bind模块中,需要将其包含在内。

module org.example.foo {
    requires java.xml.bind;
}

Java 8

Java 8现在提供java.util.Base64用于编码和解码base64。

编码

byte[] message = "hello world".getBytes(StandardCharsets.UTF_8);
String encoded = Base64.getEncoder().encodeToString(message);
System.out.println(encoded);
// => aGVsbG8gd29ybGQ=

解码

byte[] decoded = Base64.getDecoder().decode("aGVsbG8gd29ybGQ=");
System.out.println(new String(decoded, StandardCharsets.UTF_8));
// => hello world

Java 6和7

自从Java 6版本起,较为不为人知的类javax.xml.bind.DatatypeConverter可以被使用。这是JRE的一部分,无需额外的库。

编码

byte[] message = "hello world".getBytes("UTF-8");
String encoded = DatatypeConverter.printBase64Binary(message);
System.out.println(encoded);
// => aGVsbG8gd29ybGQ=  

解码

byte[] decoded = DatatypeConverter.parseBase64Binary("aGVsbG8gd29ybGQ=");
System.out.println(new String(decoded, "UTF-8"));
// => hello world

5
迄今为止,我一直使用Base64类,但现在我需要在Java 7中运行一个应用程序。我之前不知道DatatypeConverter类。谢谢。 - Semaphor
1
DatatypeConverter在Java 9中不能直接使用。 - bedrin
1
感谢Java 7的解决方案 - 真不敢相信我还需要它!! - pstanton
parseBase64Binary在数据大于64k时无法使用? 在这种情况下要使用什么(仅使用java 7)? - dynamicJos
你救了我们。谢谢! - Shalika

16

Apache Commons 中,commons-codec-1.7.jar 包含一个 Base64 类,可以用于编码。

通过 Maven:

<dependency>
    <groupId>commons-codec</groupId>
    <artifactId>commons-codec</artifactId>
    <version>20041127.091804</version>
</dependency>

直接下载


Apache Commons确实提供了一个可行的Base64解码器,您可以使用它。您可能特别想在Java版本早于1.8时使用它,但是还有更新的库版本可供使用。截至本文撰写时,您可以使用1.11版本,这比20041127.091804(上面引用的版本)要新得多。 - jwj
这是我使用的,因为它适用于Java 7。只是想向寻找适用于较低版本Java的解决方案的人指出这一点。 - user11006286

13
如果您是安卓开发人员,可以使用 android.util.Base64 类来实现此目的。

问题在于只有 API 26 及以上的版本可以运行此应用...2019 年只有 8% 的设备拥有这个版本...太遗憾了。 - vinicius gati
1
@viniciusgati Base64 在 API 级别 8 中被添加,这基本上意味着它在存在的所有设备上都得到支持。 - nitzanj
1
请注意,Android有两个Base64类:android.util.Base64(自API 8以来)和java.util.Base64(自API 26以来)。导入时要注意包名。 - Andrew T.

5

Guava还有Base64(以及其他编码和非常有用的内容)


7
如果你同时引入了很多其他库,那么Guava也有2.2万个方法可能对你来说并不是什么大问题。最近我自己也遇到了这个可爱的墙壁(DEX方法数量限制为65k),在从Google Play移除所有我不需要的内容后,我只比限制少100个方法。然而,在移除了Guava之后,我恢复了大约2.2万个方法。 - alphanumeric character

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接