Base64编码是将字节数组编码为可以打印的字符数组,解码是将Base64的字符数组还原为原字节数组。
1.8之前,我们一般可以使用 sun.misc.BASE64Encoder
和sun.misc.BASE64Decoder
来进行Base64的编解码,但是这个API是sun公司的专用API,可能在未来发行版中删除,一般在IDE中都有警告或者报错,编译的时候也会警告。所以我们一般还会使用apache的commons-codec包中的org.apache.commons.codec.binary.Base64
,在1.8中JDK提供了原生的Base64编解码器java.util.Base64.getEncoder()
和java.util.Base64.getDecoder()
,这些都可以完美替换掉专用的API。
下面给出示例代码:
public static void main(String[] args) throws Exception{
byte[] ss = new byte[]{1,2,3,4,5,6,7,8,9,0,-23,23,21,-128,127};
byte[] encodeBase64 = org.apache.commons.codec.binary.Base64.encodeBase64(ss);
print(encodeBase64);
System.out.println(new String(encodeBase64));
byte[] decodeBase64 = org.apache.commons.codec.binary.Base64.decodeBase64(encodeBase64);
print(decodeBase64);
System.out.println("-----------------------------");
String encode = new sun.misc.BASE64Encoder().encode(ss);
System.out.println(encode);
byte[] bytes = new sun.misc.BASE64Decoder().decodeBuffer(encode);
print(bytes);
System.out.println("-----------------------------");
byte[] bytes1 = java.util.Base64.getEncoder().encode(ss);
print(bytes1);
String x = new String(bytes1);
System.out.println(x);
byte[] decode = java.util.Base64.getDecoder().decode(x);
print(decode);
}
private static void print(byte[] c){
if(org.apache.commons.codec.binary.Base64.isBase64(c)){
for (int i = 0; i < c.length; i++) {
System.out.print((char)c[i]+"-");
}
}else {
for (int i = 0; i < c.length; i++) {
System.out.print(c[i]+"-");
}
}
System.out.println();
}