当前位置:   article > 正文

Java Base64 编码与解码----三种实现方式的代码实例_base64.getmimedecoder().decode

base64.getmimedecoder().decode

在Java 8中,Base64编码已经成为Java类库的标准。
Java 8 内置了 Base64 编码的编码器和解码器。
Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:

基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。
URL:输出被映射到一组字符A-Za-z0-9+_,输出是URL和文件。
MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用'\r'并跟随'\n'作为分割。编码输出最后没有行分割。

下面是代码实例和与之对应的运行结果图

  1. package com.lxk.java8;
  2. import org.junit.Test;
  3. import java.io.UnsupportedEncodingException;
  4. import java.util.Base64;
  5. import java.util.UUID;
  6. /**
  7. * 在Java 8中,Base64编码已经成为Java类库的标准。
  8. * Java 8 内置了 Base64 编码的编码器和解码器。
  9. * Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:
  10. * <p>
  11. * 基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。
  12. * URL:输出被映射到一组字符A-Za-z0-9+_,输出是URL和文件。
  13. * MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用'\r'并跟随'\n'作为分割。编码输出最后没有行分割。
  14. *
  15. * @author LiXuekai on 2019/6/27
  16. */
  17. public class Base64Test {
  18. private static final String UTF_8 = "utf-8";
  19. private static final int MAX = 10;
  20. @Test
  21. public void base64() throws UnsupportedEncodingException {
  22. test();
  23. basic();
  24. url();
  25. mime();
  26. }
  27. /**
  28. * 测试几个特殊字符
  29. */
  30. private void test() throws UnsupportedEncodingException {
  31. String ss = "星期五?/\\|";
  32. System.out.println("ordinal : " + ss);
  33. byte[] encode = Base64.getEncoder().encode(ss.getBytes(UTF_8));
  34. System.out.println("basic encode : " + new String(encode, UTF_8));
  35. String yy = "5pif5pyf5LqUPy9cfA==";
  36. byte[] decode = Base64.getDecoder().decode(yy);
  37. System.out.println("Using Basic : " + new String(decode, UTF_8));
  38. byte[] decode1 = Base64.getUrlDecoder().decode(yy);
  39. System.out.println("Using URL : " + new String(decode1, UTF_8));
  40. byte[] decode2 = Base64.getMimeDecoder().decode(yy);
  41. System.out.println("Using MIME : " + new String(decode2, UTF_8));
  42. System.out.println();
  43. }
  44. /**
  45. * MIME编码器会使用基本的字母数字产生BASE64输出,
  46. * 而且对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束
  47. */
  48. private void mime() throws UnsupportedEncodingException {
  49. StringBuilder sb = new StringBuilder();
  50. for (int t = 0; t < MAX; ++t) {
  51. sb.append(UUID.randomUUID().toString());
  52. }
  53. byte[] toEncode = sb.toString().getBytes("utf-8");
  54. String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);
  55. System.out.println("Using MIME : ");
  56. System.out.println(mimeEncoded);
  57. }
  58. /**
  59. * 但由于URL对反斜线“/”有特殊的意义,因此URL编码需要替换掉它,使用下划线替换
  60. * 如果是使用基本的编码器,那么输出可能会包含反斜线“/”字符,
  61. * 但是如果使用URL编码器,那么输出的内容对URL来说是安全的。
  62. */
  63. private void url() throws UnsupportedEncodingException {
  64. String ordinal = "subjects?abcd";
  65. System.out.println("ordinal : " + ordinal);
  66. // 输出为: Using Basic Alphabet: c3ViamVjdHM/YWJjZA==
  67. String basicEncoded = Base64.getEncoder().encodeToString(ordinal.getBytes(UTF_8));
  68. System.out.println("Using Basic : " + basicEncoded);
  69. byte[] decode = Base64.getDecoder().decode(basicEncoded.getBytes(UTF_8));
  70. System.out.println("basic decode : " + new String(decode, UTF_8));
  71. System.out.println();
  72. System.out.println("ordinal : " + ordinal);
  73. // 输出为: Using URL Alphabet: c3ViamVjdHM_YWJjZA==
  74. String urlEncoded = Base64.getUrlEncoder().encodeToString(ordinal.getBytes(UTF_8));
  75. System.out.println("Using URL : " + urlEncoded);
  76. byte[] decode1 = Base64.getUrlDecoder().decode(urlEncoded);
  77. System.out.println("url decode : " + new String(decode1, UTF_8));
  78. System.out.println();
  79. }
  80. /**
  81. * Basic编码是标准的BASE64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由字母加数字组成。
  82. */
  83. private void basic() throws UnsupportedEncodingException {
  84. String s = "some string";
  85. System.out.println("ordinal : " + s);
  86. // 编码
  87. String asB64 = Base64.getEncoder().encodeToString(s.getBytes(UTF_8));
  88. // 输出为: c29tZSBzdHJpbmc=
  89. System.out.println("Using Basic : " + asB64);
  90. // 解码
  91. byte[] asBytes = Base64.getDecoder().decode("c29tZSBzdHJpbmc=");
  92. // 输出为: some string
  93. System.out.println("basic decode : " + new String(asBytes, UTF_8));
  94. System.out.println();
  95. }
  96. }

运行结果截图

大师兄

根据需求,选择使用哪个编码和解码

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Monodyee/article/detail/202942
推荐阅读
相关标签
  

闽ICP备14008679号