Java:Base64 编码
环境
- jdk 8 或者 6
示例
jdk 6
package jiangbo.java.lang;
import java.io.IOException;
import java.nio.charset.Charset;
import javax.xml.bind.DatatypeConverter;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
public class Base64Demo {
public static void main(String[] args) throws IOException {
String name = "jiangbo";
Charset utf8 = Charset.forName("UTF-8");
BASE64Encoder base64Encoder = new sun.misc.BASE64Encoder();
String BASE64EncoderString = base64Encoder.encode(name.getBytes(utf8));
System.out.println(BASE64EncoderString);
BASE64Decoder base64Decoder = new sun.misc.BASE64Decoder();
byte[] decodeBuffer = base64Decoder.decodeBuffer(BASE64EncoderString);
System.out.println(new String(decodeBuffer, utf8));
String base64String = DatatypeConverter.printBase64Binary(name.getBytes(utf8));
System.out.println(base64String);
byte[] base64Binary = DatatypeConverter.parseBase64Binary(base64String);
System.out.println(new String(base64Binary, utf8));
}
}
jdk 8
package jiangbo.java.lang;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Demo {
public static void main(String[] args) throws IOException {
String name = "Base64 编码";
String string = Base64.getEncoder().encodeToString(name.getBytes(StandardCharsets.UTF_8));
System.out.println(string);
byte[] bytes = Base64.getDecoder().decode(string);
System.out.println(new String(bytes, StandardCharsets.UTF_8));
// url safe:不会出现 + /
string = Base64.getUrlEncoder().encodeToString(name.getBytes(StandardCharsets.UTF_8));
System.out.println(string);
bytes = Base64.getUrlDecoder().decode(string);
System.out.println(new String(bytes, StandardCharsets.UTF_8));
}
}
commons-codec
加入依赖
<dependency>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
<version>1.14</version>
</dependency>
package jiangbo.java.lang;
import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public class Base64Demo {
public static void main(String[] args) throws IOException {
string = org.apache.commons.codec.binary.Base64.encodeBase64String(name.getBytes(StandardCharsets.UTF_8));
System.out.println(string);
bytes = org.apache.commons.codec.binary.Base64.decodeBase64(string);
System.out.println(new String(bytes, StandardCharsets.UTF_8));
// url safe:不会出现 + /
string = org.apache.commons.codec.binary.Base64
.encodeBase64URLSafeString(name.getBytes(StandardCharsets.UTF_8));
System.out.println(string);
bytes = org.apache.commons.codec.binary.Base64.decodeBase64(string);
System.out.println(new String(bytes, StandardCharsets.UTF_8));
}
}
工具类
package jiangbo.java.lang;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
public final class Base64Utils {
private Base64Utils() {
}
public static final byte[] encode(byte[] bytes) {
return Base64.getEncoder().encode(bytes);
}
public static final byte[] encodeString(String str) {
return encode(str.getBytes(StandardCharsets.UTF_8));
}
public static final String encodeToString(byte[] bytes) {
return new String(encode(bytes), StandardCharsets.UTF_8);
}
public static final String encodeStringToString(String str) {
return encodeToString(str.getBytes(StandardCharsets.UTF_8));
}
public static final byte[] decode(byte[] bytes) {
return Base64.getDecoder().decode(bytes);
}
public static final byte[] decodeString(String str) {
return decode(str.getBytes(StandardCharsets.UTF_8));
}
public static final String decodeToString(byte[] bytes) {
return new String(decode(bytes), StandardCharsets.UTF_8);
}
public static final String decodeStringToString(String str) {
return decodeToString(str.getBytes(StandardCharsets.UTF_8));
}
public static final String encodeUrlSafeString(String str) {
return Base64.getUrlEncoder().encodeToString(str.getBytes(StandardCharsets.UTF_8));
}
public static final String decodeUrlSafeString(String str) {
return new String(Base64.getUrlDecoder().decode(str), StandardCharsets.UTF_8);
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
· 25岁的心里话