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

Posted 我是一个豆笔

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用相关的知识,希望对你有一定的参考价值。

[toc]

描述

最近研究把项目的JDK升级从1.8升级到9.0.1,在eclipse上配置好JDK为9后,发现项目有错,查看发现sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用。

原因分析

参看官网,发现JDK中的lib\tools.jar和JRE中的lib\rt.jar已从Java SE 9中删除。这些JAR中可用的类和资源现在以文件中的内部格式存储在lib目录的命名模块中。 可以使用称为jrt的新方案来从运行时映像检索这些类和资源。 依靠这些JAR位置的应用程序将不再工作。(http://www.oracle.com/technetwork/java/javase/9-relnote-issues-3704069.html

处理办法

从官网发现,从JDK 1.8开始,就提供了java.util.Base64.Decoder和java.util.Base64.Encoder的JDK公共API,可代替sun.misc.BASE64Decoder和sun.misc.BASE64Encoder的JDK内部API。我把代码做了如下替换:
java.util.Base64.Decoder的官网API:https://docs.oracle.com/javase/9/docs/api/java/util/Base64.Decoder.html
java.util.Base64.Encoder的官网API:https://docs.oracle.com/javase/9/docs/api/java/util/Base64.Encoder.html

    /**
     * BASE64Encoder 加密
     * 
     * @param data
     *            要加密的数据
     * @return 加密后的字符串
     */
    public static String encryptBASE64(byte[] data) {
        // BASE64Encoder encoder = new BASE64Encoder();
        // String encode = encoder.encode(data);
        // 从JKD 9开始rt.jar包已废除,从JDK 1.8开始使用java.util.Base64.Encoder
        Encoder encoder = Base64.getEncoder();
        String encode = encoder.encodeToString(data);
        return encode;
    }
    /**
     * BASE64Decoder 解密
     * 
     * @param data
     *            要解密的字符串
     * @return 解密后的byte[]
     * @throws Exception
     */
    public static byte[] decryptBASE64(String data) throws Exception {
        // BASE64Decoder decoder = new BASE64Decoder();
        // byte[] buffer = decoder.decodeBuffer(data);
        // 从JKD 9开始rt.jar包已废除,从JDK 1.8开始使用java.util.Base64.Decoder
        Decoder decoder = Base64.getDecoder();
        byte[] buffer = decoder.decode(data);
        return buffer;
    }

参考

http://www.jianshu.com/p/340965388320

以上是关于JDK从1.8升级到9.0.1后sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用的主要内容,如果未能解决你的问题,请参考以下文章

Base64

sun.misc.Unsafed的API说明

jdk1.6升级到1.8报bean创建错误

ubuntu jdk1.7升级到1.8

从 1.8 升级到 2.2.4 后,Django 无法创建用于单元测试的表

找不到方法 sun.misc.Unsafe.defineClass