[Java8]_[增強功能]_[Base64編解碼]

場景

  1. 有時候我們需要在XML文件裏保存一個縮略圖,但是XML不支持不可見字符的保存,如何做?

  2. 當我們需要在URLPOSTPUT一些不可見字符或特殊符號,比如+號,如何做?

說明

  1. Base64是網絡上最常見的用於傳輸8Bit字節碼的編碼方式之一,Base64就是一種基於64個可打印字符來表示二進制數據的方法。可查看RFC2045~RFC2049,上面有MIME的詳細規範.

  2. 對於以上的問題可以通過Base64把縮略圖內容直接轉碼爲可見的字符就能存儲在XML文檔裏.

  3. 對於特殊字符作爲的URL或者HTTP頭或者密碼,也可以通過Base64轉碼之後再提交.

  4. JDK8之前, Java SE並沒有提供公共的Base64方法,只有未文檔化的sun.misc.BASE64Encoder.現在JDK8在包java.util.Base64裏提供了工廠方法實現.

例子

  1. 文件TestBase64.java
import java.io.IOException;
import java.io.OutputStream;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;

/**
 * TestBase64
 */
public class TestBase64 {

    public static void PRINT(String str) {
        System.out.println(str);
    }

    private static void testBase64(){

        // base64編碼
        PRINT("====================== testBase64 =======================");
        PRINT("====================== encoder =======================");
        Base64.Encoder encoder = Base64.getEncoder();
        String normalString = "https://infoworld.blog.csdn.net++";
        String encodedString = encoder.encodeToString( 
                normalString.getBytes(StandardCharsets.UTF_8));
        PRINT(encodedString);

        // base64解碼
        PRINT("=================== decoder ==========================");
        Base64.Decoder decoder = Base64.getDecoder();
        byte[] decodedByteArray = decoder.decode(encodedString);
        String buf = new String(decodedByteArray);
        PRINT(buf);

        // 編碼文件
        PRINT("====================== mimeEncoder =======================");
        Path originalPath = Paths.get("1.txt");
        Path targetPath = Paths.get("1-base64.txt");
        Base64.Encoder mimeEncoder = Base64.getMimeEncoder();
        try (OutputStream output = Files.newOutputStream(targetPath)) {
            Files.copy(originalPath, mimeEncoder.wrap(output));
        }catch(IOException e){
            e.printStackTrace();
        }
    }

    public static void main(String[] args) {
        testBase64();
    }
}
  1. 1-base64.txt
aHR0cHM6Oi8vaW5mb3dvcmxkLmJsb2cuY3Nkbi5u
  1. 輸出:
====================== testBase64 =======================
====================== encoder =======================
aHR0cHM6Ly9pbmZvd29ybGQuYmxvZy5jc2RuLm5ldCsr
=================== decoder ==========================
https://infoworld.blog.csdn.net++
====================== mimeEncoder =======================

參考

Java API Base64

base64百科

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章