Table of Contents
ToggleJava Base64 UrlEncoder Methods
在 Java 中提供 URL 編碼器,與基本編碼器相同,唯一的區別是對 URL 和檔案名稱安全,使用 Base64 字母表進行編碼,並且不添加任何行分隔,將輸入映射到 A-Z 、 a-z 、 0-9 、 -_ 字元集中的一組字元,同時也使用 Apache Commons Codec 的實用 API 進行編碼, Base64 UrlEncoder Java Methods 本篇增加了範例,並透過單元測試來驗證產出結果。
檔案目錄
./
+- src
+- test
| +- org
| +- ruoxue
| +- java_147
| +- base64
| +- url
| +- Base64UrlEncoderMethodsTest.java
單元測試
Base64 UrlEncoder Methods Java 提供 URL 編碼器操作,將 byte[] 編碼成 Base64 。
encode
建立一個 String ,轉成 byte[] ,使用 Base64.UrlEncoder 進行編碼。
@Test
public void encode() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
byte[] result = encoder.encode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=");
}
https://www.ruoxue.org/?s=base64
[B@6aa8ceb6
aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=
encodeWithoutPadding
Base64 UrlEncoder Methods Java 建立一個 String ,轉成 byte[] ,使用 Base64.UrlEncoder 不進行填充的編碼。
@Test
public void encodeWithoutPadding() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
byte[] result = encoder.withoutPadding().encode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ");
}
https://www.ruoxue.org/?s=base64
[B@6aa8ceb6
aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ
encodeWithDst
Base64 UrlEncoder Methods Java 建立一個 String ,轉成 byte[] 使用 Base64.UrlEncoder 進行編碼,將結果存放到另一個陣列。
@Test
public void encodeWithDst() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
int size = 100;
byte[] dst = new byte[size];
int result = encoder.encode(value.getBytes(StandardCharsets.UTF_8.toString()), dst);
System.out.println(result);
String stringResult = new String(dst);
System.out.println(stringResult);
assertThat(stringResult).containsIgnoringWhitespaces("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ")
.hasSize(size);
}
https://www.ruoxue.org/?s=base64
44
aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=
encodeWithByteBuffer
Base64 UrlEncoder Methods Java 建立一個 String ,轉成 byte[] 包裝成 ByteBuffer ,使用 Base64.UrlEncoder 進行編碼,傳回 ByteBuffer 。
@Test
public void encodeWithByteBuffer() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
ByteBuffer byteBuffer = ByteBuffer.wrap(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(byteBuffer);
ByteBuffer result = encoder.encode(byteBuffer);
System.out.println(result);
String stringResult = new String(result.array(), StandardCharsets.UTF_8.toString());
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=");
}
java.nio.HeapByteBuffer[pos=0 lim=64 cap=64]
java.nio.HeapByteBuffer[pos=0 lim=88 cap=88]
QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLw==
encodeToString
Base64 UrlEncoder Methods 建立一個 String ,轉成 byte[] 使用 Base64.UrlEncoder 進行編碼,傳回字串。
@Test
public void encodeToString() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
String result = encoder.encodeToString(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
assertThat(result).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=");
}
https://www.ruoxue.org/?s=base64
aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=
wrap
Base64 UrlEncoder Methods 建立一個檔案 ,使用 Base64.UrlEncoder 進行編碼,將結果輸出到另一個檔案。
@Test
public void wrap() throws Exception {
Path src = Paths.get("./", "settings.gradle");
System.out.println(src);
Path dst = Paths.get("./", "settings.log");
System.out.println(dst);
Base64.Encoder encoder = Base64.getUrlEncoder();
try (OutputStream output = Files.newOutputStream(dst)) {
long result = Files.copy(src, encoder.wrap(output));
System.out.println(result);
// OutputStream encodedStrem = encoder.wrap(output);
}
}
.\settings.gradle
.\settings.log
365
Base64_encodeBase64URLSafe
Base64 UrlEncoder Methods in Java 建立一個 String ,轉成 byte[] 使用 Apache Commons Codec 套件 Base64 進行編碼。
@Test
public void Base64_encodeBase64URLSafe() throws Exception {
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
byte[] result = org.apache.commons.codec.binary.Base64
.encodeBase64URLSafe(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ");
}
https://www.ruoxue.org/?s=base64
[B@1a93a7ca
aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ
Base64_encodeBase64String
Base64 UrlEncoder Methods in Java 建立一個 String ,轉成 byte[] 使用 Apache Commons Codec 套件 Base64 進行編碼,傳回字串。
@Test
public void Base64_encodeBase64URLSafeString() throws Exception {
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
String result = org.apache.commons.codec.binary.Base64
.encodeBase64URLSafeString(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
assertThat(result).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ");
}
https://www.ruoxue.org/?s=base64
aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ
Base64UrlEncoderMethodsTest.java
Base64 UrlEncoder Methods in Java 新增單元測試,驗證 Base64 UrlEncoder Functions in Java 是否符合預期。
package org.ruoxue.java_147.base64.url;
import static org.assertj.core.api.Assertions.assertThat;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Base64;
import org.junit.Test;
public class Base64UrlEncoderMethodsTest {
@Test
public void encode() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
byte[] result = encoder.encode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=");
}
@Test
public void encodeWithoutPadding() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
byte[] result = encoder.withoutPadding().encode(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ");
}
@Test
public void encodeWithDst() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
int size = 100;
byte[] dst = new byte[size];
int result = encoder.encode(value.getBytes(StandardCharsets.UTF_8.toString()), dst);
System.out.println(result);
String stringResult = new String(dst);
System.out.println(stringResult);
assertThat(stringResult).containsIgnoringWhitespaces("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ")
.hasSize(size);
}
@Test
public void encodeWithByteBuffer() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
ByteBuffer byteBuffer = ByteBuffer.wrap(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(byteBuffer);
ByteBuffer result = encoder.encode(byteBuffer);
System.out.println(result);
String stringResult = new String(result.array(), StandardCharsets.UTF_8.toString());
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=");
}
@Test
public void encodeToString() throws Exception {
Base64.Encoder encoder = Base64.getUrlEncoder();
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
String result = encoder.encodeToString(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
assertThat(result).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ=");
}
@Test
public void wrap() throws Exception {
Path src = Paths.get("./", "settings.gradle");
System.out.println(src);
Path dst = Paths.get("./", "settings.log");
System.out.println(dst);
Base64.Encoder encoder = Base64.getUrlEncoder();
try (OutputStream output = Files.newOutputStream(dst)) {
long result = Files.copy(src, encoder.wrap(output));
System.out.println(result);
// OutputStream encodedStrem = encoder.wrap(output);
}
}
@Test
public void Base64_encodeBase64URLSafe() throws Exception {
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
byte[] result = org.apache.commons.codec.binary.Base64
.encodeBase64URLSafe(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
String stringResult = new String(result);
System.out.println(stringResult);
assertThat(stringResult).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ");
}
@Test
public void Base64_encodeBase64URLSafeString() throws Exception {
String value = "https://www.ruoxue.org/?s=base64";
System.out.println(value);
String result = org.apache.commons.codec.binary.Base64
.encodeBase64URLSafeString(value.getBytes(StandardCharsets.UTF_8.toString()));
System.out.println(result);
assertThat(result).isEqualTo("aHR0cHM6Ly93d3cucnVveHVlLm9yZy8_cz1iYXNlNjQ");
}
}
心得分享
Base64 UrlEncoder Functions in Java 是一種將二進位資料轉換為文字格式的編碼方案,以便編碼後的文字資料可以輕鬆地透過網路傳輸,不會損壞且不會遺失任何資料, Base64 工具類別提供了一套靜態方法取得 URL 編碼器,依照 RFC 4648 中指定的 Base64 字母表,輸出映射到一組字元A-Za-z0-9_- ,熟悉 Base64 UrlEncoder Methods in Java 這些方法的操作,提升開發效率,在應用上相當廣泛。