本文主要是介绍如何替代被遗弃的BASE64Encoder/BASE64Decoder,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
一、问题
二、问题原由
三、问题的解决办法(使用新的替代类)
四、扩展
一、问题
关键词:编译警告“警告: BASE64Decoder是内部专用 API, 可能会在未来发行版中删除”或“警告: BASE64Encoder是内部专用 API, 可能会在未来发行版中删除”
场景:在编码时,密码加密或二进制转换的时候,使用了sun.misc.BASE64Encoder编码或sun.misc.BASE64Decoder解码。
System.out.println("===============sun.misc.BASE64Encoder|sun.misc.BASE64Decoder=======================");//以前使用Base64编码/解码final BASE64Encoder encoder = new BASE64Encoder();final BASE64Decoder decoder = new BASE64Decoder();//编码String text = "字符串、Hello, word";String encoderText = encoder.encode(text.getBytes());System.out.println(encoderText);//解码try {byte[] bytes = decoder.decodeBuffer(encoderText);System.out.println(new String(bytes, "UTF-8"));} catch (IOException e) {e.printStackTrace();}
二、问题原由
使用了sun.misc包下的BASE64Encoder类或BASE64Decoder类。这两个类是sun公司的内部方法,并没有在java api中公开过,不属于JDK标准库范畴,但在JDK中包含了该类,可以直接使用。java8及后面已经弃用了该类,java9已经移除并有新的替代类。
三、问题的解决办法(使用新的替代类)
-
替代方案:下面给出框架中经常使用jar包中的替代类(实际其他jar中也有替代的类),而且这几种替代的类,可以互相解码彼此编码后的字符串。
1、第一种替代类:jdk1.8的java.util.Base64类
System.out.println("================jdk1.8:java.util.Base64======================");//java8 使用Base64.Encoder encoder1 = Base64.getEncoder();Base64.Decoder decoder1 = Base64.getDecoder();//编码String text2 = "字符串、Hello world";String encodeValue2 = encoder1.encodeToString(text2.getBytes());System.out.println(encodeValue2);//解码byte[] decode2 = decoder1.decode(encodeValue2);try {System.out.println(new String(decode2, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}
2、第二种替代类:Apache的commons-codec的org.apache.commons.codec.binary.Base64类
System.out.println("================Apache:commons-codec:org.apache.commons.codec.binary.Base64======================");final org.apache.commons.codec.binary.Base64 base64 = new org.apache.commons.codec.binary.Base64();String text1 = "字符串、Hello, word";//编码byte[] bytes = base64.encode(text1.getBytes());System.out.println(bytes);String encodeValue = base64.encodeToString(text1.getBytes());System.out.println(encodeValue);//解码byte[] decode = base64.decode(encodeValue);try {System.out.println(new String(decode, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}
3、第三种替代类:spring-core:org.springframework.util.Base64Utils类
System.out.println("================spring-core:org.springframework.util.Base64Utils======================");String text4 = "字符串|Hello world";//编码String encodeValue4 = Base64Utils.encodeToString(text4.getBytes());System.out.println(encodeValue4);//解码byte[] bytes4 = Base64Utils.decodeFromString(encodeValue4);try {System.out.println(new String(bytes4, "UTF-8"));} catch (UnsupportedEncodingException e) {e.printStackTrace();}
四、扩展
编码/解码替代的类,可以互相解码彼此编码后的字符串。实际上,他们底层的编码与加码的算法都是一样的,所以使用不用担心别人给你的是哪一种编码类生成字符串。
参考文献:
1、http://blog.sina.com.cn/s/blog_5a6efa330102v8st.html
2、https://www.cnblogs.com/alter888/p/9140732.html
这篇关于如何替代被遗弃的BASE64Encoder/BASE64Decoder的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!