`

Java 8实现BASE64编解码

 
阅读更多

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

 

java.util.Base64工具类提供了一套静态方法获取下面三种BASE64编解码器:

1)Basic编码
2)URL编码
3)MIME编码

 

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

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

 

URL编码也是我们经常会面对的需求,但由于URL对反斜线“/”有特殊的意义,因此URL编码需要替换掉它,使用下划线替换。

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

 

MIME编码会使用基本的字母数字产生BASE64输出,而且对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束。

StringBuilder sb = new StringBuilder();  
for (int t = 0; t < 10; ++t) {  
  sb.append(UUID.randomUUID().toString());  
}  
  
byte[] toEncode = sb.toString().getBytes("utf-8");  
String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode);  
System.out.println(mimeEncoded);  
// 输出为:  
NDU5ZTFkNDEtMDVlNy00MDFiLTk3YjgtMWRlMmRkMWEzMzc5YTJkZmEzY2YtM2Y2My00Y2Q4LTk5  
ZmYtMTU1NzY0MWM5Zjk4ODA5ZjVjOGUtOGMxNi00ZmVjLTgyZjctNmVjYTU5MTAxZWUyNjQ1MjJj  
NDMtYzA0MC00MjExLTk0NWMtYmFiZGRlNDk5OTZhMDMxZGE5ZTYtZWVhYS00OGFmLTlhMjgtMDM1  
ZjAyY2QxNDUyOWZiMjI3NDctNmI3OC00YjgyLThiZGQtM2MyY2E3ZGNjYmIxOTQ1MDVkOGQtMzIz  
Yi00MDg0LWE0ZmItYzkwMGEzNDUxZTIwOTllZTJiYjctMWI3MS00YmQzLTgyYjUtZGRmYmYxNDA4  
Mjg3YTMxZjMxZmMtYTdmYy00YzMyLTkyNzktZTc2ZDc5ZWU4N2M5ZDU1NmQ4NWYtMDkwOC00YjIy  
LWIwYWItMzJiYmZmM2M0OTBm  

 

java.util.Base64类封装了所有的BASE64编码器和解码器,还支持流的封装——这是一个非常优雅的构造——包括编码和效率都很高(无需缓冲Buffer)——即编码器和解码器的输入和输出无需缓冲Buffer。

下面我们以一个例子来说明编码器是怎样封装FileOutputStream,以及解码器是怎样封装FileInputStream的,两者皆不需要缓冲Buffer:

public void wrapping() throws IOException {  
  String src = "This is the content of any resource read from somewhere" +  
    " into a stream. This can be text, image, video or any other stream.";  
  
  // 编码器封装OutputStream, 文件/tmp/buff-base64.txt的内容是BASE64编码的形式  
  try (OutputStream os = Base64.getEncoder().wrap(newFileOutputStream("/tmp/buff-base64.txt"))) {  
    os.write(src.getBytes("utf-8"));  
  }  
  
  // 解码器封装InputStream, 以及以流的方式解码, 无需缓冲  
  // is being consumed. There is no need to buffer the content of the file just for decoding it.  
  try (InputStream is = Base64.getDecoder().wrap(newFileInputStream("/tmp/buff-base64.txt"))) {  
    int len;  
    byte[] bytes = new byte[100];  
    while ((len = is.read(bytes)) != -1) {  
      System.out.print(new String(bytes, 0, len, "utf-8"));  
    }  
  }  
}  

 

转:http://blog.csdn.net/chszs/article/details/17027649

 

分享到:
评论

相关推荐

    java的base64编解码

    base64编解码

    java和js相互base64编码解码

    在Java 8及更高版本中,已经内置了`java.util.Base64`类来支持Base64编码和解码。例如,在`Base64EnOut.java`文件中,可能会包含以下代码: ```java import java.util.Base64; public class Base64EnOut { public...

    电子邮件MIME协议中的Base64编解码

    * 使用编程语言(如C++、Java、Python等)实现Base64编解码算法 * 使用Base64编解码库(如 OpenSSL 等) * 使用在线工具实现Base64编解码 6.实验步骤和调试过程 实验步骤和调试过程包括: * 编写Base64编解码程序...

    java实现BASE64编码和解码程序

    实现BASE64编码和解码程序, 在类中实现如下函数并运行测试正确。 BASE64编码算法请在网上查询。 public String encode(byte[] data) { } public byte[] decode(String b) { }

    BASE64编码和解码的JAVA实现

    BASE64编码和解码的JAVA实现。 太简单了。直接调用API实现的。 反正不要分,你们看着下吧。

    Base64编解码Demo

    在实践中,你可以使用各种编程语言实现Base64的编解码,例如Python的`base64`库,Java的`java.util.Base64`类,或者JavaScript的`btoa`和`atob`函数。 总结来说,这个"Base64编解码Demo"涉及到将MAC地址和IP地址...

    用java实现base64编码和解码

    实现base64编码和解码。实现下面的类中的两个功能。 public class Base64 { /** 实现解码功能 */ public static byte[] decode(byte[] dest) { } /** 实现编码功能 */ public static byte[] encode(byte[] ...

    Java之Base64编解码.pptx.pptx

    在Java中,Base64编解码操作主要通过`java.util.Base64`类来实现。这个类提供了多个静态方法用于编码和解码。例如,`getEncoder()`方法返回一个Base64编码器实例,`encodeToString(byte[])`方法则可以将字节数组编码...

    Base64编解码程序 附带源码 可以把文件编码为bmp图片

    Base64编解码程序 可以把文件编码为bmp图片 当然编码出来的图片当然是很不美观的~~~ 注意:不要编码或解码过大的文件~~ 因为该程序的所有操作都是在内存中进行的~~ 且是单线程的~~ 编码出来的位图是BITMAPCOREHEADER...

    Base64 编码解码 Java

    Base64 编码解码 Java ,Java对字符串Base64 编码解码的方法!!

    Java Base64编码和解码

    在Java 8及更高版本中,Java引入了`java.util.Base64`类,提供了方便的Base64编码和解码API。以下是一些关键的方法: 1. `encodeBytes(byte[] input)`:将字节数组进行Base64编码,返回一个包含编码结果的字符串。 ...

    Java基于Base64实现编码解码图片文件

    "Java基于Base64实现编码解码图片文件" Java基于Base64实现编码解码图片文件是Java语言中的一种常见的编码解码实现方式。Base64是一种常用的字符编码,在很多地方都会用到,但它并不是安全领域下的加密解密算法,...

    Kotlin Base64编解码类

    Kotlin Base64编解码类,可以对AES/DES的加密密文作编码和解码,防止出现加解密出错的问题。 encrypt before size: 16 encrypt after size: 24 使用DES作加密解密时,咱们会发现加密后的密码变长了,这样会直接导致...

    java实现base64加密

    在Java中,Base64的实现主要依赖于`java.util.Base64`类,这个类是在Java 8中引入的,提供了一系列的静态方法来完成Base64的编码和解码工作。下面我们将详细探讨如何在Java中实现Base64加密和解密: 1. **Base64...

    Base64编解码.rar

    几乎所有的编程语言都提供了Base64编码和解码的库或内置函数,如Python的`base64`模块,JavaScript的`btoa()`和`atob()`方法,Java的`java.util.Base64`类等。 **6. Base64与安全性** 虽然Base64是一种编码方式,而...

    Base64编码和解码java版本

    在Java中,Base64编码和解码的功能主要通过`java.util.Base64`这个类来实现,该类在Java 8及以上版本中引入。下面将详细介绍如何使用这个类进行Base64的编码和解码操作。 首先,我们来看Base64编码的过程。编码的...

    用Java实现BASE64加密解密

    总之,Java提供了方便的`java.util.Base64`工具类来处理Base64编码和解码,使得在Java项目中实现Base64加密解密变得简单且高效。这个基础的加密解密机制虽然简单,但在很多场景下已经足够满足基本的数据保护需求。

    base64编码解码源码

    在实际开发中,大多数编程语言都有内置的库函数或模块来处理Base64编码和解码,比如Python的`base64`模块,Java的`java.util.Base64`类,JavaScript的`atob()`和`btoa()`方法等。这些内置函数通常比自定义实现更高效...

    sun base64解码实现

    标题中的“sun base64解码实现”是指在Java编程语言中使用内置的Sun JDK提供的Base64解码功能。Base64是一种用于将任意二进制数据编码为ASCII字符的编码方式,常用于在网络上传输包含二进制的数据,如图片、证书等。...

    Java实现的Base64编码程序

    在Java中实现Base64编码,我们可以使用内置的`java.util.Base64`类,这个类提供了方便的方法来进行Base64的编码和解码。 Base64编码的原理是将每3个字节(24位)的数据分为4组,每组6位。由于ASCII码是7位的,因此6...

Global site tag (gtag.js) - Google Analytics