我正在尝试清理我的构建环境,并发现了一些关于使用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替换它们?我意识到这些只是警告,但这是我打算解决的问题。
答案 0 :(得分:7)
目前尚不清楚为什么你首先声明自己的HttpURLConnection
和Handler
课程?你是否确定要编译它们?
至于Base64 - 我自己也喜欢this public domain implementation。
答案 1 :(得分:6)
如果你已经写了一个http客户端,那么你已经重新发明了轮子。 apache http client已经有一个非常好的了。
如果您想要Base64编码/解码,那么apache commons codec中就有一个类。
答案 2 :(得分:3)
答案 3 :(得分:0)
我不确定为什么您需要在代码中直接使用这些sun.net.www.protocol.http
对象,因为HttpUrlConnection
在内部使用这些对象。您可以使用该对象而不是内部对象。如果该API无法满足您的需求,则会Apache HttpClient。
对于base 64编码,您可以使用Java Mail提供的编码,如下所示:
final InputStream decoded = MimeUtility.decode(encodedInput, "base64");
答案 4 :(得分:0)
对于Base64,从Java 8开始,您可以使用java.util.Base64.getEncoder().encode(Byte[])
和java.util.Base64.getDecoder().decode(Byte[])