我想知道使用哪个库来进行 base64编码/解码? 我需要这个功能足够稳定以便生产使用。
Within Apache Commons, commons-codec-1.7.jar contains a Base64 class which can be used to encode.
Via Maven:
<dependency> <groupId>commons-codec</groupId> <artifactId>commons-codec</artifactId> <version>20041127.091804</version> </dependency>
Direct Download
Guava also has Base64 (among other encodings and incredibly useful stuff)
Use the Java 8 solution. Note DatatypeConverter can still be used, but it is now within the java.xml.bind module which will need to be included.
java.xml.bind
module org.example.foo { requires java.xml.bind; }
Java 8 now provides java.util.Base64 for encoding and decoding base64.
java.util.Base64
Encoding
byte[] message = "hello world".getBytes(StandardCharsets.UTF_8); String encoded = Base64.getEncoder().encodeToString(message); System.out.println(encoded); // => aGVsbG8gd29ybGQ=
Decoding
byte[] decoded = Base64.getDecoder().decode("aGVsbG8gd29ybGQ="); System.out.println(new String(decoded, StandardCharsets.UTF_8)); // => hello world
Since Java 6 the lesser known class javax.xml.bind.DatatypeConverter can be used. This is part of the JRE, no extra libraries required.
javax.xml.bind.DatatypeConverter
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
If you're an Android developer you can use android.util.Base64 class for this purpose.
android.util.Base64