如何替代被遗弃的BASE64EncoderBASE64Decoder
⽬录
⼀、问题
关键词:编译警告“警告: 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 = Bytes());
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 = Encoder();
Base64.Decoder decoder1 = Decoder();
//编码
String text2 = "字符串、Hello world";
String encodeValue2 = Bytes());
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的dec.binary.Base64类
System.out.println("================Apache:commons-codec:dec.binary.Base64======================");
final dec.binary.Base64 base64 = new dec.binary.Base64();
String text1 = "字符串、Hello, word";
//编码
byte[] bytes = Bytes());
System.out.println(bytes);
String encodeValue = Bytes());
System.out.println(encodeValue);
//解码
byte[] decode = base64.decode(encodeValue);
try {
System.out.println(new String(decode, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
jdk怎么使用}
3、第三种替代类:spring-core:org.springframework.util.Base64Utils类
System.out.println("================spring-core:org.springframework.util.Base64Utils======================");
String text4 = "字符串|Hello world";
//编码
String encodeValue4 = Bytes());
System.out.println(encodeValue4);
//解码
byte[] bytes4 = Base64Utils.decodeFromString(encodeValue4);
try {
System.out.println(new String(bytes4, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
四、扩展
编码/解码替代的类,可以互相解码彼此编码后的字符串。实际上,他们底层的编码与加码的算法都是⼀样的,所以使⽤不⽤担⼼别⼈给你的是哪⼀种编码类⽣成字符串。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。