Java Base64 UrlEncoder Methods - Java 147

Java Base64 UrlEncoder Methods – Java 147

Java 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 這些方法的操作,提升開發效率,在應用上相當廣泛。

發佈留言