jdk1.8——Base64

x33g5p2x  于2022-01-13 转载在 其他  
字(2.8k)|赞(0)|评价(0)|浏览(520)

jdk1.8新增了Base64编解码功能;

提供了3种Base64编码方式:

  1. Basic:Base64.getEncoder()和Base64.getDecoder()

编码输出组成:大小写字母、数字、+、/

如果编码后的二进制长度非3的倍数则会使用=补齐,所以编码后会有0-2个=在结尾,不需要补齐可以使用Base64.getEncoder().withoutPadding();(下同)

  1. URL and Filename safe:Base64.getUrlEncoder()和Base64.getUrlDecoder()

编码输出组成:大小写字母、数字、-、_

编码后不包含“/”等特殊字符,不会对url或者文件名或者路径造成干扰;

  1. MIME:Base64.getMimeEncoder()、Base64.getMimeEncoder(lineLength, lineSeparator)和Base64.getMimeDecoder()

编码输出组成跟Basic一样,不过限制了每行的长度和每行的分隔符,默认的每行不超过76个字符并且用\r\n作为换行符,也可以自定义行长度和行分隔符;

指定行长的时候会四舍五入到4的倍数长度(向下取到4的倍数的长度,如果长度<=0则不会分行);

指定的分隔符不能包含编码表里的字符(不能包含Basic里的:大小写字母、数字、+、/,但是可以包含-和_);

Encoder可以使用的编码方法:

Decoder可以使用的解码方法:

小Demo:

  1. @Test
  2. public void test() {
  3. System.out.println("========1=======");
  4. Encoder baseEncoder = Base64.getEncoder();
  5. Decoder baseDecoder = Base64.getDecoder();
  6. String s1 = baseEncoder.encodeToString("12345678?abcd".getBytes());
  7. System.out.println(s1);
  8. byte[] bytes1 = baseDecoder.decode(s1);
  9. System.out.println(new String(bytes1));
  10. System.out.println("========2=======");
  11. Encoder urlEncoder = Base64.getUrlEncoder();
  12. Decoder urlDecoder = Base64.getUrlDecoder();
  13. String s2 = urlEncoder.encodeToString("12345678/abcde".getBytes());
  14. System.out.println(s2);
  15. byte[] bytes2 = urlDecoder.decode(s2);
  16. System.out.println(new String(bytes2));
  17. System.out.println("========3=======");
  18. Encoder mimeEncoder = Base64.getMimeEncoder();
  19. Decoder mimeDecoder = Base64.getMimeDecoder();
  20. String s3 = mimeEncoder.encodeToString("123abc测试123abc测试123abc测试123abc测试123abc测试123abc测试".getBytes());
  21. System.out.println(s3);
  22. byte[] bytes3 = mimeDecoder.decode(s3);
  23. System.out.println(new String(bytes3));
  24. System.out.println("========4=======");
  25. Encoder mimeEncoder4 = Base64.getMimeEncoder(4, "~".getBytes());
  26. Encoder mimeEncoder5 = Base64.getMimeEncoder(5, "~".getBytes());
  27. Encoder mimeEncoder6 = Base64.getMimeEncoder(6, "~".getBytes());
  28. Encoder mimeEncoder7 = Base64.getMimeEncoder(7, "~".getBytes());
  29. Encoder mimeEncoder8 = Base64.getMimeEncoder(8, "_".getBytes());
  30. Encoder mimeEncoder9 = Base64.getMimeEncoder(9, "_".getBytes());
  31. Encoder mimeEncoder10 = Base64.getMimeEncoder(10, "_".getBytes());
  32. System.out.println(mimeEncoder4.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  33. System.out.println(mimeEncoder5.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  34. System.out.println(mimeEncoder6.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  35. System.out.println(mimeEncoder7.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  36. System.out.println(mimeEncoder8.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  37. System.out.println(mimeEncoder9.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  38. System.out.println(mimeEncoder10.encodeToString("aaaaaaaaaaaaaaaaaaaaaaa".getBytes()));
  39. }

输出:

相关文章