Table of Contents
ToggleJava Base64 Decoder Methods
將字串解碼為二進位資料,字串必須屬於字元 A-Za-z0-9+/ 這 64 種字元組合,否則無法解碼,會拋出 IllegalArgumentException: Illegal base64 character ,此外也採用 Apache Commons Codec 的實用 API 進行解碼, Base64 Decoder Java Methods 本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- base64
| +- basic
| +- Base64DecoderMethodsTest.java
單元測試
Base64 Decoder Methods Java 提供 Base64 基本解碼器操作,將字串解碼成二進位資料。
decode
建立一個 String ,轉成 byte[] ,使用 Base64.Decoder 進行解碼。
@Test
public void decode() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = decoder.decode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==
[B@32a1bec0
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
decodeWithoutPadding
Base64 Decoder Methods Java 建立一個 String ,編碼不進行填充 ,轉成 byte[] ,使用 Base64.Decoder 解碼。
@Test
public void decodeWithoutPadding() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw";
System.out.println(value);
byte[] result = decoder.decode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw
[B@32a1bec0
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
decodeWithDst
Base64 Decoder Methods Java 建立一個 String ,轉成 byte[] 使用 Base64.Decoder 進行解碼,將結果存放到另一個陣列。
@Test
public void decodeWithDst() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
int size = 100;
byte[] dst = new byte[size];
int result = decoder.decode(value.getBytes(StandardCharsets.UTF_8.toString()), dst);
System.out.println(result);
String stringResult = new String(dst);
System.out.println(stringResult);
assertThat(stringResult)
.containsIgnoringWhitespaces("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
.hasSize(size);
}
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==
64
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
decodeWithByteBuffer
Base64 Decoder Methods Java 建立一個 String ,轉成 byte[] 包裝成 ByteBuffer ,使用 Base64.Decoder 進行解碼,傳回 ByteBuffer 。
@Test
public void decodeWithByteBuffer() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
ByteBuffer byteBuffer = ByteBuffer.wrap(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(byteBuffer);
ByteBuffer result = decoder.decode(byteBuffer);
System.out.println(result);
String stringResult = new String(result.array(), StandardCharsets.UTF_8.toString());
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
java.nio.HeapByteBuffer[pos=0 lim=88 cap=88]
java.nio.HeapByteBuffer[pos=0 lim=64 cap=64]
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
decodeWithString
Base64 Decoder Methods 建立一個 String , 使用 Base64.Decoder 進行解碼。
@Test
public void decodeWithString() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = decoder.decode(value);
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==
Base64_decodeBase64
建立一個 String ,轉成 byte[] 使用 Apache Commons Codec 套件 Base64 進行解碼。
@Test
public void Base64_decodeBase64() throws Exception {
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = org.apache.commons.codec.binary.Base64
.decodeBase64(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==
[B@1a93a7ca
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Base64_decodeBase64WithString
建立一個 String ,轉成 byte[] 使用 Apache Commons Codec 套件 Base64 進行解碼。
@Test
public void Base64_decodeBase64WithString() throws Exception {
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = org.apache.commons.codec.binary.Base64.decodeBase64(value);
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==
[B@2b05039f
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/
Base64DecoderMethodsTest.java
Base64 Decoder Methods in Java 新增單元測試,驗證 Base64 Decoder Functions in Java 是否符合預期。
package org.ruoxue.java_147.base64.basic;
import static org.assertj.core.api.Assertions.assertThat;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.util.Base64;
import org.junit.Test;
public class Base64DecoderMethodsTest {
@Test
public void decode() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = decoder.decode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
@Test
public void decodeWithoutPadding() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw";
System.out.println(value);
byte[] result = decoder.decode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
@Test
public void decodeWithDst() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
int size = 100;
byte[] dst = new byte[size];
int result = decoder.decode(value.getBytes(StandardCharsets.UTF_8.toString()), dst);
System.out.println(result);
String stringResult = new String(dst);
System.out.println(stringResult);
assertThat(stringResult)
.containsIgnoringWhitespaces("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/")
.hasSize(size);
}
@Test
public void decodeWithByteBuffer() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
ByteBuffer byteBuffer = ByteBuffer.wrap(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(byteBuffer);
ByteBuffer result = decoder.decode(byteBuffer);
System.out.println(result);
String stringResult = new String(result.array(), StandardCharsets.UTF_8.toString());
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
@Test
public void decodeWithString() throws Exception {
Base64.Decoder decoder = Base64.getDecoder();
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = decoder.decode(value);
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
@Test
public void Base64_decodeBase64() throws Exception {
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = org.apache.commons.codec.binary.Base64
.decodeBase64(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
@Test
public void Base64_decodeBase64WithString() throws Exception {
String value = "QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==";
System.out.println(value);
byte[] result = org.apache.commons.codec.binary.Base64.decodeBase64(value);
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/");
}
}
心得分享
Base64 Decoder Functions in Java 工具類別提供了一套靜態方法取得基本解碼器,依照 RFC 4648 中指定的 Base64 字母表,將一組字元A-Za-z0-9+/ ,解碼成二進位資料,熟悉 Base64 Decoder Methods in Java 這些方法的操作,提升開發效率,在應用上相當廣泛。