Java - Base64編碼與解碼

哈囉,未來的Java巫師們!今天,我們將要深入Base64編碼和解碼的神奇世界。如果你是程式設計新手也別擔心 - 我將成為你在這段旅程中的友好指南,我們將一步一步來。在這個教學結束時,你將能像專家一樣進行編碼和解碼!

Java - Base64 Encode Decode

什麼是Base64?

在我們跳進代碼之前,讓我們先了解Base64是什麼以及我們為什麼要使用它。想像一下你試圖將一個秘密訊息傳遞給你的朋友,但你只能使用64個不同的字符。這基本上就是Base64所做的 - 它取任何類型的數據並使用僅有的64個不同字符來表示。

這有什麼用處呢?嗯,有些系統只能處理文本,不能處理二進位數據。Base64允許我們將二進位數據轉換為這些系統可以處理的文本。這就像將外國語言翻譯成大家都懂的語言一樣!

基本的Base64編碼和解碼

我們從基礎開始。Java提供了一個內建類別稱為Base64,我們可以使用它進行編碼和解碼。以下是一個簡單的例子:

import java.util.Base64;

public class Base64Demo {
public static void main(String[] args) {
String originalInput = "Hello, Java!";
String encodedString = Base64.getEncoder().encodeToString(originalInput.getBytes());
System.out.println("編碼後的字符串: " + encodedString);

byte[] decodedBytes = Base64.getDecoder().decode(encodedString);
String decodedString = new String(decodedBytes);
System.out.println("解碼後的字符串: " + decodedString);
}
}

讓我們來分解一下:

  1. 我們從一個簡單的字符串開始:"Hello, Java!"
  2. 我們使用Base64.getEncoder().encodeToString()將我們的字符串編碼為Base64。
  3. 然後我們使用Base64.getDecoder().decode()將Base64字符串解碼回字節。
  4. 最後,我們將字節轉換回字符串。

當你運行這段代碼時,你將會看到:

編碼後的字符串: SGVsbG8sIEphdmEh
解碼後的字符串: Hello, Java!

這不是很酷嗎?我們剛才將我們的訊息變成了一個秘密代碼,然後又將它解碼回來!

用於URL的Base64編碼和解碼

現在,你可能在想:"這很棒,但如果我想在URL中使用這個呢?" 嗯,Java已經為你準備好了!有一個特殊的URL編碼器可以替換一些字符,使編碼後的字符串對URL來說是安全的:

import java.util.Base64;

public class Base64URLDemo {
public static void main(String[] args) {
String originalUrl = "https://www.example.com/some/path?param=value";
String encodedUrl = Base64.getUrlEncoder().encodeToString(originalUrl.getBytes());
System.out.println("編碼後的URL: " + encodedUrl);

byte[] decodedBytes = Base64.getUrlDecoder().decode(encodedUrl);
String decodedUrl = new String(decodedBytes);
System.out.println("解碼後的URL: " + decodedUrl);
}
}

這段代碼與我們的第一個例子類似,但它使用getUrlEncoder()getUrlDecoder()。這些方法確保編碼後的字符串對URL來說是安全的。

用於MIME類型內容的Base64編碼和解碼

MIME(多用途網際網路郵件延伸)是一個標準,它擴展了電子郵件的格式以支援非文本附件等。Java為MIME內容提供了特殊的Base64編碼器和解碼器:

import java.util.Base64;

public class Base64MIMEDemo {
public static void main(String[] args) {
String originalInput = "This is a long string that we'll encode with MIME.\n" +
"It can span multiple lines and even include special characters!";
String encodedMime = Base64.getMimeEncoder().encodeToString(originalInput.getBytes());
System.out.println("編碼後的MIME: " + encodedMime);

byte[] decodedBytes = Base64.getMimeDecoder().decode(encodedMime);
String decodedMime = new String(decodedBytes);
System.out.println("解碼後的MIME: " + decodedMime);
}
}

MIME編碼器添加了換行符,以確保編碼後的字符串每行從不超過76個字符,這是MIME編碼內容的要求。

Base64類別的嵌套類別

Base64類別包含幾個提供不同編碼和解碼功能性的嵌套類別:

  1. Base64.Encoder:使用Base64編碼方案編碼字節數據。
  2. Base64.Decoder:解碼Base64編碼的數據。

Base64類別方法

以下是Base64類別中一些重要方法的表格:

方法 描述
getEncoder() 返回一個使用Basic類型Base64編碼方案的Base64.Encoder。
getDecoder() 返回一個使用Basic類型Base64編碼方案的Base64.Decoder。
getUrlEncoder() 返回一個使用URL和檔案名稱安全類型Base64編碼方案的Base64.Encoder。
getUrlDecoder() 返回一個使用URL和檔案名稱安全類型Base64編碼方案的Base64.Decoder。
getMimeEncoder() 返回一個使用MIME類型Base64編碼方案的Base64.Encoder。
getMimeDecoder() 返回一個使用MIME類型Base64編碼方案的Base64.Decoder。

結論

就是這樣,各位!我們已經走過了Java中的Base64編碼和解碼的土地。我們學會了如何編碼和解碼基本字符串、URL,甚至MIME內容。記住,Base64就像是你數據的通用翻譯器 - 它幫助不同的系統更好地相互理解。

當你繼續你的Java冒險時,你將會發現還有許多更多令人興奮的主題等著你去探索。但現在,拍拍自己的背 - 你已經掌握了一個在網頁開發、檔案處理和程式設計的許多其他領域中使用的重 要概念。

繼續編碼,繼續學習,最重要的是,繼續玩得開心!直到下次,這是你友好的Java老師簽名離開。快樂編碼!

Credits: Image by storyset