Java 8实现BASE64编解码

简介: Java 8实现BASE64编解码 Java一直缺少BASE64编码 API,以至于通常在项目开发中会选用第三方的API实现。但是,Java 8实现了BASE64编解码API,它包含到java.util包。

Java 8实现BASE64编解码

Java一直缺少BASE64编码 API,以至于通常在项目开发中会选用第三方的API实现。但是,Java 8实现了BASE64编解码API,它包含到java.util包。下面我会对Java 8的BASE64 API做一个介绍。
java.util.Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:
1)Basic编码
2)URL编码
3)MIME编码

Basic编码是标准的BASE64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由字母加数字组成。下面是用法:

点击(此处)折叠或打开

  1. // 编码
  2. String asB64 = Base64.getEncoder().encodeToString("some string".getBytes("utf-8"));
  3. System.out.println(asB64); // 输出为: c29tZSBzdHJpbmc=
  4.  
  5. // 解码
  6. byte[] asBytes = Base64.getDecoder().decode("c29tZSBzdHJpbmc=");
  7. System.out.println(new String(asBytes, "utf-8"));

与早期处理BASE64编码需求相比,不可能更简单了。因为无需外部依赖:commons-codec或sun.misc.BASE64Decoder或JAXB的DatatypeConverter。
URL编码也是我们经常会面对的需求,但由于URL对反斜线“/”有特殊的意义,因此URL编码需要替换掉它,使用下划线替换。比如下面的例子:

点击(此处)折叠或打开

  1. String basicEncoded = Base64.getEncoder().encodeToString("subjects?abcd".getBytes("utf-8"));
  2. System.out.println("Using Basic Alphabet: " + basicEncoded);
  3.  
  4. String urlEncoded = Base64.getUrlEncoder().encodeToString("subjects?abcd".getBytes("utf-8"));
  5. System.out.println("Using URL Alphabet: " + urlEncoded);
  6. // 输出为:
  7. Using Basic Alphabet: c3ViamVjdHM/YWJjZA==
  8. Using URL Alphabet: c3ViamVjdHM_YWJjZA==

上面的例子可以看出,如果是使用基本的编码器,那么输出可能会包含反斜线“/”字符,但是如果使用URL编码器,那么输出的内容对URL来说是安全的。
MIME编码器会使用基本的字母数字产生BASE64输出,而且对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束。比如下面的例子:

点击(此处)折叠或打开

  1. StringBuilder sb = new StringBuilder();
  2. for (int t = 0; t 10; ++t) {
  3.   sb.append(UUID.randomUUID().toString());
  4. }

  5. byte[] toEncode = sb.toString().getBytes("utf-8");
  6. String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);
  7. System.out.println(mimeEncoded);
  8. // 输出为:
  9. NDU5ZTFkNDEtMDVlNy00MDFiLTk3YjgtMWRlMmRkMWEzMzc5YTJkZmEzY2YtM2Y2My00Y2Q4LTk5
  10. ZmYtMTU1NzY0MWM5Zjk4ODA5ZjVjOGUtOGMxNi00ZmVjLTgyZjctNmVjYTU5MTAxZWUyNjQ1MjJj
  11. NDMtYzA0MC00MjExLTk0NWMtYmFiZGRlNDk5OTZhMDMxZGE5ZTYtZWVhYS00OGFmLTlhMjgtMDM1
  12. ZjAyY2QxNDUyOWZiMjI3NDctNmI3OC00YjgyLThiZGQtM2MyY2E3ZGNjYmIxOTQ1MDVkOGQtMzIz
  13. Yi00MDg0LWE0ZmItYzkwMGEzNDUxZTIwOTllZTJiYjctMWI3MS00YmQzLTgyYjUtZGRmYmYxNDA4
  14. Mjg3YTMxZjMxZmMtYTdmYy00YzMyLTkyNzktZTc2ZDc5ZWU4N2M5ZDU1NmQ4NWYtMDkwOC00YjIy
  15. LWIwYWItMzJiYmZmM2M0OTBm

java.util.Base64类封装了所有的BASE64编码器和解码器,还支持流的封装——这是一个非常优雅的构造——包括编码和效率都很高(无需缓冲Buffer)——即编码器和解码器的输入和输出无需缓冲Buffer。下面我们以一个例子来说明编码器是怎样封装FileOutputStream,以及解码器是怎样封装FileInputStream的,两者皆不需要缓冲Buffer:

点击(此处)折叠或打开

  1. public void wrapping() throws IOException {
  2.   String src = "This is the content of any resource read from somewhere" +
  3.     " into a stream. This can be text, image, video or any other stream.";

  4.   // 编码器封装OutputStream, 文件/tmp/buff-base64.txt的内容是BASE64编码的形式
  5.   try (OutputStream os = Base64.getEncoder().wrap(newFileOutputStream("/tmp/buff-base64.txt"))) {
  6.     os.write(src.getBytes("utf-8"));
  7.   }

  8.   // 解码器封装InputStream, 以及以流的方式解码, 无需缓冲
  9.   // is being consumed. There is no need to buffer the content of the file just for decoding it.
  10.   try (InputStream is = Base64.getDecoder().wrap(newFileInputStream("/tmp/buff-base64.txt"))) {
  11.     int len;
  12.     byte[] bytes = new byte[100];
  13.     while ((len = is.read(bytes)) != -1) {
  14.       System.out.print(new String(bytes, 0, len, "utf-8"));
  15.     }
  16.   }
  17. }




目录
相关文章
|
5月前
|
存储 Java 数据安全/隐私保护
Java技术栈揭秘:Base64加密和解密文件的实战案例
以上就是我们今天关于Java实现Base64编码和解码的实战案例介绍。希望能对你有所帮助。还有更多知识等待你去探索和学习,让我们一同努力,继续前行!
463 5
|
7月前
|
前端开发 JavaScript Java
Java中将图片转换为base64格式的技巧
这样,你就可以在Java中将图片转换为Base64格式了。这个方法的实现非常简单,只需要使用Java的内置库,无需任何额外的库。希望这个方法对你有所帮助。
456 22
|
存储 安全 Java
"Java编码魔法:揭秘图片与文件的Base64神秘转换术,让数据在指尖跳跃!"
【8月更文挑战第16天】Base64编码在Java开发中常用于将二进制数据如图片转换为ASCII字符串以便传输。编码使用64个字符及等号填充,每3字节数据编码为4个字符。Java利用`java.util.Base64`类实现此功能:读取图片或文件为字节数组后进行编码。解码时将Base64字符串还原为字节数组并写入文件。需注意编码效率降低、不提供安全性及特殊字符兼容性等问题。掌握这些技巧有助于解决Web开发中的数据传输需求。
625 4
|
Java
Java 图片、文件 Base64 互转
Java 图片、文件 Base64 互转
234 0
|
存储 Java 数据处理
Java的Base64加密解密详解
Java的Base64加密解密详解
|
编解码 数据可视化 Java
Java如何进行Base64的编码(Encode)与解码(Decode)?
Java如何进行Base64的编码(Encode)与解码(Decode)?
864 1
|
算法 Java API
Base64编码介绍及基于Java语言实现
Base64编码介绍及基于Java语言实现
254 0
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
564 1
|
存储 Java
java用base64编码案例
Java Base64编码示例:导入`java.util.Base64`,设置字符串`originalString`,使用`Base64.getEncoder().encodeToString()`编码并存储到`encodedString`,打印编码后字符串。解码用`Base64.getDecoder().decode()`。
135 0
|
Java 数据安全/隐私保护
java base64 加密 解密
java base64 加密 解密