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 中是不是仍然可用? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

一文了解sun.misc.Unsafe

JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用

Java sun.misc.unsafe类的使用

在 Java 9 中删除 sun.misc.Unsafe 将破坏 Spring、Hibernate

java.lang.ClassNotFoundException:sun.misc.Cleaner

java-sun.misc.BASE64Decode AccessException