6

我正在尝试清理我的构建环境,并发现了一些关于使用 Sun 专有 API 的警告。

[javac] /workspace/<path-to-files>/Handler.java:18: warning: sun.net.www.protocol.http.Handler is Sun proprietary API and may be removed in a future release
[javac] public class Handler extends sun.net.www.protocol.http.Handler {
[javac]                                                       ^
[javac] /workspace/<path-to-files>/HttpClient.java:16: warning: sun.net.www.http.HttpClient is Sun proprietary API and may be removed in a future release 
[javac] public class HttpClient extends sun.net.www.http.HttpClient {
[javac]
[javac] /workspace/<path-to-files>/HttpURLConnection.java:19: warning: sun.net.www.protocol.http.HttpURLConnection is Sun proprietary API and may be removed in a future release
[javac] public class HttpURLConnection extends sun.net.www.protocol.http.HttpURLConnection {
[javac]                                                                 ^

和...

[javac] /workspace/<path-to-files>/JavaFile.java:17: warning: sun.misc.BASE64Decoder is Sun proprietary API and may be removed in a future release
[javac] import sun.misc.BASE64Decoder;
[javac]                ^
[javac] /workspace/<path-to-files>/JavaFile.java:338: warning: sun.misc.BASE64Encoder is Sun proprietary API and may be removed in a future release
[javac]          BASE64Encoder encoder = new BASE64Encoder();
[javac]          ^

任何人都可以建议这些 API 的一个很好的替代方案吗?或者可以用官方的 Java API 替换它们吗?我意识到这些只是警告,但这是我计划解决的问题。

4

5 回答 5

7

不清楚你为什么要首先声明自己的类HttpURLConnectionHandler类 - 你确定要编译它们吗?

至于 Base64 - 我自己喜欢这个公共领域的实现

于 2012-11-20T14:51:48.617 回答
6

如果您编写了一个 http 客户端,那么您就重新发明了轮子。apache http client中已经有一个非常好的。

如果您想要 Base64 编码/解码,则在apache commons codec中有一个类。

于 2012-11-20T14:52:31.987 回答
3

Apache Commons Codec包括Base64类。

于 2012-11-20T14:51:41.600 回答
1

对于 Base64,从 Java 8 开始,您可以使用java.util.Base64.getEncoder().encode(Byte[])java.util.Base64.getDecoder().decode(Byte[])

于 2019-03-27T19:52:56.073 回答
0

我不确定为什么需要sun.net.www.protocol.http在代码中直接使用这些对象,因为它们是由HttpUrlConnection. 您可以使用该对象而不是内部对象。如果该 API 不能满足您的需求,可以使用 Apache HttpClient

至于 base 64 编码,您可以使用Java Mail提供的编码,如下所示:

final InputStream decoded = MimeUtility.decode(encodedInput, "base64");

Apache commons-codec

于 2012-11-20T15:01:20.920 回答