Intellij-解決報錯:import sun.misc.BASE64Decoder無法找到

原博客地址:http://www.cnblogs.com/wsygdb/p/7890237.html

報錯原因:JDK從1.8升級到9.0.1後sun.misc.BASE64Decoder和sun.misc.BASE64Encoder不可用

描述

最近研究把項目的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;
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章