导入Eclipse时sun.misc.BASE64Decoder/Encoder无法解析的问题求助
解决sun.misc.BASE64Decoder/Encoder导入报错的方案
sun.misc包下的BASE64相关类是Oracle JDK的内部非标准API,从Java 9开始被官方移除/限制访问,所以导入Eclipse后会出现无法解析的错误,仅转警告通常无法解决编译或运行问题,给你几个可行的解决办法:
一、替换为JDK标准BASE64类(推荐)
Java 8及以上版本提供了java.util.Base64这个标准类,完全可以替代sun.misc的实现,且跨JDK版本兼容,代码替换示例:
解码替换
原代码:
import sun.misc.BASE64Decoder; // ... byte[] bytes = new BASE64Decoder().decodeBuffer(base64Str);
替换为:
import java.util.Base64; // ... byte[] bytes = Base64.getDecoder().decode(base64Str);
编码替换
原代码:
import sun.misc.BASE64Encoder; // ... String base64Str = new BASE64Encoder().encodeBuffer(byteArray);
替换为(无需换行的情况):
import java.util.Base64; // ... String base64Str = Base64.getEncoder().encodeToString(byteArray);
如果需要和原encodeBuffer一致的带换行MIME格式编码:
String base64Str = Base64.getMimeEncoder().encodeToString(byteArray);
二、强制让Eclipse允许访问sun.misc类(仅适用于Oracle JDK 8)
如果必须保留原有代码,只能依赖Oracle JDK 8(Java 9+彻底移除了这些类),并按以下步骤设置:
- 右键项目 → Properties → Java Build Path → Libraries,将JRE System Library切换为Oracle JDK 8;
- 同样在项目Properties里,进入Java Compiler → Errors/Warnings,找到Deprecated and restricted API,把Forbidden reference (access rules)改为Warning或Ignore;
- 再回到Java Build Path的Libraries,展开JRE System Library,右键Access Rules → Add,设置Resolution为
Accessible,Pattern为sun/misc/**,点击确定保存。
三、使用第三方BASE64库
比如Apache Commons Codec的Base64类,步骤如下:
- 下载Apache Commons Codec的jar包,添加到项目的Build Path中;
- 替换代码:
import org.apache.commons.codec.binary.Base64; // 解码 byte[] bytes = Base64.decodeBase64(base64Str); // 编码 String base64Str = Base64.encodeBase64String(byteArray);
内容的提问来源于stack exchange,提问作者Harsh Paradkar
相关产品推荐
相关产品推荐

