在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'作为分割。编码输出最后没有行分割。

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

package com.lxk.java8; 
 
import org.junit.Test; 
 
import java.io.UnsupportedEncodingException; 
import java.util.Base64; 
import java.util.UUID; 
 
/** 
 * 在Java 8中,Base64编码已经成为Java类库的标准。 
 * Java 8 内置了 Base64 编码的编码器和解码器。 
 * Base64工具类提供了一套静态方法获取下面三种BASE64编解码器: 
 * <p> 
 * 基本:输出被映射到一组字符A-Za-z0-9+/,编码不添加任何行标,输出的解码仅支持A-Za-z0-9+/。 
 * URL:输出被映射到一组字符A-Za-z0-9+_,输出是URL和文件。 
 * MIME:输出隐射到MIME友好格式。输出每行不超过76字符,并且使用'\r'并跟随'\n'作为分割。编码输出最后没有行分割。 
 * 
 * @author LiXuekai on 2019/6/27 
 */ 
public class Base64Test { 
 
    private static final String UTF_8 = "utf-8"; 
    private static final int MAX = 10; 
 
    @Test 
    public void base64() throws UnsupportedEncodingException { 
        test(); 
        basic(); 
        url(); 
        mime(); 
 
    } 
 
    /** 
     * 测试几个特殊字符 
     */ 
    private void test() throws UnsupportedEncodingException { 
        String ss = "星期五?/\\|"; 
        System.out.println("ordinal         : " + ss); 
        byte[] encode = Base64.getEncoder().encode(ss.getBytes(UTF_8)); 
        System.out.println("basic encode    : " + new String(encode, UTF_8)); 
 
        String yy = "5pif5pyf5LqUPy9cfA=="; 
        byte[] decode = Base64.getDecoder().decode(yy); 
        System.out.println("Using Basic     : " + new String(decode, UTF_8)); 
 
        byte[] decode1 = Base64.getUrlDecoder().decode(yy); 
        System.out.println("Using URL       : " + new String(decode1, UTF_8)); 
 
        byte[] decode2 = Base64.getMimeDecoder().decode(yy); 
        System.out.println("Using MIME      : " + new String(decode2, UTF_8)); 
 
        System.out.println(); 
    } 
 
    /** 
     * MIME编码器会使用基本的字母数字产生BASE64输出, 
     * 而且对MIME格式友好:每一行输出不超过76个字符,而且每行以“\r\n”符结束 
     */ 
    private void mime() throws UnsupportedEncodingException { 
        StringBuilder sb = new StringBuilder(); 
        for (int t = 0; t < MAX; ++t) { 
            sb.append(UUID.randomUUID().toString()); 
        } 
 
        byte[] toEncode = sb.toString().getBytes("utf-8"); 
        String mimeEncoded = Base64.getMimeEncoder().encodeToString(toEncode); 
        System.out.println("Using MIME      : "); 
        System.out.println(mimeEncoded); 
    } 
 
    /** 
     * 但由于URL对反斜线“/”有特殊的意义,因此URL编码需要替换掉它,使用下划线替换 
     * 如果是使用基本的编码器,那么输出可能会包含反斜线“/”字符, 
     * 但是如果使用URL编码器,那么输出的内容对URL来说是安全的。 
     */ 
    private void url() throws UnsupportedEncodingException { 
        String ordinal = "subjects?abcd"; 
        System.out.println("ordinal         : " + ordinal); 
        // 输出为: Using Basic Alphabet: c3ViamVjdHM/YWJjZA== 
        String basicEncoded = Base64.getEncoder().encodeToString(ordinal.getBytes(UTF_8)); 
        System.out.println("Using Basic     : " + basicEncoded); 
 
        byte[] decode = Base64.getDecoder().decode(basicEncoded.getBytes(UTF_8)); 
        System.out.println("basic decode    : " + new String(decode, UTF_8)); 
        System.out.println(); 
 
        System.out.println("ordinal         : " + ordinal); 
        // 输出为: Using URL Alphabet: c3ViamVjdHM_YWJjZA== 
        String urlEncoded = Base64.getUrlEncoder().encodeToString(ordinal.getBytes(UTF_8)); 
        System.out.println("Using URL       : " + urlEncoded); 
 
        byte[] decode1 = Base64.getUrlDecoder().decode(urlEncoded); 
        System.out.println("url decode      : " + new String(decode1, UTF_8)); 
        System.out.println(); 
    } 
 
    /** 
     * Basic编码是标准的BASE64编码,用于处理常规的需求:输出的内容不添加换行符,而且输出的内容由字母加数字组成。 
     */ 
    private void basic() throws UnsupportedEncodingException { 
        String s = "some string"; 
        System.out.println("ordinal         : " + s); 
        // 编码 
        String asB64 = Base64.getEncoder().encodeToString(s.getBytes(UTF_8)); 
        // 输出为: c29tZSBzdHJpbmc= 
        System.out.println("Using Basic     : " + asB64); 
 
        // 解码 
        byte[] asBytes = Base64.getDecoder().decode("c29tZSBzdHJpbmc="); 
        // 输出为: some string 
        System.out.println("basic decode    : " + new String(asBytes, UTF_8)); 
 
        System.out.println(); 
    } 
} 

运行结果截图

大师兄

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


发布评论
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

Java 代码 各种不规范示范,希望引以为戒,望看到的大哥们 都能把代码写的规范点,方便你我他。知识解答
你是第一个吃螃蟹的人
发表评论

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。