sun.misc 包在 java 中是不是仍然可用? [复制]
Posted
技术标签:
【中文标题】sun.misc 包在 java 中是不是仍然可用? [复制]【英文标题】:is the sun.misc package still available in java? [duplicate]sun.misc 包在 java 中是否仍然可用? [复制] 【发布时间】:2012-01-28 04:27:59 【问题描述】:我想使用 sun.misc.BASE64Encoder 包的 Base64 编码器,因为我需要对密码进行编码。但是,当我输入此包的导入时会产生错误。
要使用编码器代码的消息如下:
private synchronized static String hash(final String username, final String password)
DIGEST.reset();
return new BASE64Encoder().encode(DIGEST.digest((username.toLowerCase() + password).getBytes()));
java中是否有一个等效的类可以做同样的事情?或者,有人知道如何获取原始类的代码吗?
谢谢:)
【问题讨论】:
简短回答:“是的,但不要使用它们” 【参考方案1】:一般来说,Oracle 建议不要调用“Sun”包
http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
此外,在您的情况下,有一个请求将 sun.misc.* 的使用迁移到支持的 API (JDK-8066506),它与 sun.misc.BASE64Decoder 相关:
sun.misc.BASE64Decoder, sun.misc.BASE64Encoder
Use java.util.Base64 @since 8 instead
来源:http://www.oracle.com/technetwork/java/faq-sun-packages-142232.html
【讨论】:
【参考方案2】:我建议您忘记 sun.misc.BASE64Encoder
并使用 Apache Commons Base64 类。这是链接:http://commons.apache.org/codec/apidocs/org/apache/commons/codec/binary/Base64.html
更新(2017 年 6 月 7 日)
使用sun.misc.BASE64Encoder
会导致Java 9 出现编译错误,并且它已经在Java 8 中发出警告。
要使用的正确类是java.util
包中的Base64
。
示例:
import java.util.Base64;
Base64.getDecoder().decode(...);
【讨论】:
【参考方案3】:Java 中没有为此提供的“公开可用”(可以这么说)类。考虑使用包含 base64 实现的 Apache Commons Codec 包。主页在这里:http://commons.apache.org/codec/。
您直接使用sun.*
或com.sun.*
包,风险自负。不保证向后兼容。
【讨论】:
如果现在还有人在读这篇文章,Java 8 终于包含了一个公共的 Base64 编码器/解码器,所以没有必要再使用 Apache Commons 了。【参考方案4】:警告和错误之间有很大区别,因此您需要仔细阅读消息以了解其内容。
sun.misc 中的类可以更改,并且不会出现在所有 JVM 上。您正在使用具有 BASE64 编码的库。
恕我直言,您可以使用 sun.misc 是您了解使用该类所具有的所有风险。但是,在您的情况下,最好避免使用 sun.
和 com.sun.
下的任何类
【讨论】:
【参考方案5】:见this question 但恕我直言,接受的答案是错误的。你永远不想像以sun
开头的任何东西一样使用未记录的类。原因是现在您的代码依赖于特定的 JVM 实现(例如,IBM JVM 可能没有这个)。
第二个答案(得票最多)是您想要的答案。
【讨论】:
以上是关于sun.misc 包在 java 中是不是仍然可用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用
在 Java 9 中删除 sun.misc.Unsafe 将破坏 Spring、Hibernate