访问限制:"BASE64Decoder"类型不是API

use*_*659 7 java base64

我正在尝试将旧项目转换为maven项目.但是当项目是maven时,它会在导入的类上显示警告:

import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
Run Code Online (Sandbox Code Playgroud)

访问限制:类型'BASE64Decoder'不是API(对所需库'C:\ Program Files\Java\jre7\lib\rt.jar'的限制)

那有什么问题呢?

VGR*_*VGR 5

所有sun。*和com.sun。*软件包都是Java实现专用的。将来的任何Java版本都可能会更改它们,可能会破坏依赖于它们的应用程序代码。

相反,java。*,javax。*和javafx。*包中的所有类都是固定的。他们的姓名和公共成员不会更改,也不会被删除(从理论上讲,已弃用的人除外)。

这就是为什么您会收到一条消息,指出这些类不是公共API的一部分。它们不适合公众消费。

从Java 8开始,您应该改用java.util.Base64。但是,您似乎正在使用Java 7,因此需要改用DatatypeConverter.parseBase64BinaryDatatypeConverter.printBase64Binary

还应该提及的是,Java 9(预计于2017年7月发布)将不允许程序访问sun。*类。参见https://mreinhold.org/blog/jigsaw-module-system


小智 5

您可以使用其他BASE64类(例如Apache Commons)替换sun.misc.BASE64Encodersun.misc.BASE64Decoder或使用:

java.util.Base64;
Base64.getDecoder().decode(...);
Base64.getEncoder().encodeToString(...);
Run Code Online (Sandbox Code Playgroud)