はじめに
この実験では、java.util.Base64 クラスと Apache Commons ライブラリを使用して Java で Base64 データをエンコードおよびデコードする方法を学びます。
新しい Java ファイルを作成する
このステップでは、新しい Java ファイルを作成します。ターミナルを開き、次のコマンドを実行して新しい Java ファイルを作成します。
touch ~/project/Base64Encoding.java
このコマンドにより、~/project ディレクトリ内に Base64Encoding.java という名前の新しいファイルが作成されます。好きな名前を使っても構いませんが、.java で終わることを確認してください。
基本的なエンコードとデコード
このステップでは、基本的なエンコードとデコードについて学びます。
- 基本的なエンコーダは、エンコードおよびデコードに Base64 アルファベット を使用します。
- エンコードされた文字列には、改行区切り文字は追加されません。
- 返されるシンプルな Base64.Encoder を取得する
getEncoder()メソッドを使用します。 - 次に、文字列をエンコードするために
encodeToString()メソッドを使用します。
エンコードされた文字列をデコードするには、getDecoder() メソッドによって返される Base64.Decoder を使用します。
- デコーダの
decode()メソッドを使用します。
文字列をエンコードおよびデコードするには、次のコード ブロックを使用してください。
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
String strToEncode = "Hello World";
byte[] bytesToEncode = strToEncode.getBytes(); // 文字列をバイト配列に変換する
// エンコード
String encodedStr = Base64.getEncoder().encodeToString(bytesToEncode);
System.out.println("エンコードされた文字列: " + encodedStr);
// デコード
byte[] decodedByteArr = Base64.getDecoder().decode(encodedStr);
String decodedStr = new String(decodedByteArr);
System.out.println("デコードされた文字列: " + decodedStr);
}
}
コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。
javac Base64Encoding.java && java Base64Encoding
パディングなしの Base64 エンコード
前のステップでは、エンコードがエンコードされた文字列の末尾にパディング文字(**=**)を追加することを見ました。このステップでは、パディング文字なしでエンコードする方法を学びます。
パディングなしで文字列をエンコードするには、次のコード ブロックを使用してください。
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
String strToEncode = "Java";
byte[] bytesToEncode = strToEncode.getBytes(); // 文字列をバイト配列に変換する
// パディングなしでエンコード
String encodedStr = Base64.getEncoder().withoutPadding().encodeToString(bytesToEncode);
System.out.println("エンコードされた文字列: " + encodedStr);
}
}
コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。
javac Base64Encoding.java && java Base64Encoding
URL とファイル名に対応したセーフなエンコードとデコード
このステップでは、URL とファイル名用のセーフなエンコードとデコードについて学びます。
Base64 クラスは、URL とファイル名用のセーフな Base64 アルファベット を使用して URL のエンコードとデコードを行います。
- URL 用の Base64 エンコーダを取得するには、
getUrlEncoder()メソッドを使用します。 - その後、前のセクションと同じように
encodeToString()メソッドを使用します。
同様に、URL 用のデコーダを返す getUrlDecoder() メソッドもあります。
- このデコーダと共に
decode()メソッドを使用してデコードを行うことができます。
URL をエンコードおよびデコードするには、次のコード ブロックを使用してください。
import java.util.Base64;
public class Base64Encoding {
public static void main(String[] args) {
String urlToEncode = "https://go.java/?intcmp=gojava-banner-java-com";
// エンコード
String encodedUrl = Base64.getUrlEncoder().encodeToString(urlToEncode.getBytes());
System.out.println("エンコードされた URL: " + encodedUrl);
// デコード
byte[] decodedUrlBytes = Base64.getUrlDecoder().decode(encodedUrl);
String decodedUrl = new String(decodedUrlBytes);
System.out.print("デコードされた URL: " + decodedUrl);
}
}
コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。
javac Base64Encoding.java && java Base64Encoding
MIME エンコードとデコード
このステップでは、MIME エンコードとデコードについて学びます。
- Base64 クラスは、エンコードおよびデコード操作に Base64 アルファベットを使用します。
- エンコードされた出力では、各行は最大 76 文字まで含みます。
- 各行は、改行区切り文字としてキャリッジ リターン(\r)の後にラインフィード(\n)で終わります。
エンコードには、getMimeEncoder() と encodeToString() メソッドを使用できます。
デコードするには、getMimeDecoder() メソッドを使用してデコーダを取得し、その後 decode() メソッドを使用します。
MIME データをエンコードおよびデコードするには、次のコード ブロックを使用してください。
import java.util.Base64;
import java.util.UUID;
public class Base64Encoding {
public static void main(String[] args) {
// エンコード用の MIME 入力を作成する
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 10; ++i) {
sb.append(UUID.randomUUID().toString());
}
// エンコード
byte[] bytes = sb.toString().getBytes();
String mimeEncodedStr = Base64.getMimeEncoder().encodeToString(bytes);
System.out.println("エンコードされた文字列: " + mimeEncodedStr);
// デコード
byte[] mimeDecodedBytes = Base64.getMimeDecoder().decode(mimeEncodedStr);
String mimeDecodedStr = new String(mimeDecodedBytes);
}
}
コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。
javac Base64Encoding.java && java Base64Encoding
Apache Commons ライブラリの使用
このステップでは、Apache Commons ライブラリを使って Base64 データをエンコードおよびデコードする方法を学びます。
Apache Commons ライブラリは、org.apache.commons.codec.binary パッケージ内に Base64 クラスを提供しています。
- このクラスには、異なるエンコード方式用の 5 つの異なるコンストラクタがあります。
- Base64 インスタンスを作成した後、文字列をバイトに変換して
encode()とdecode()メソッドを使ってエンコードとデコードを行うことができます。
Apache Commons Base64 クラスを使って文字列をエンコードおよびデコードするには、次のコード ブロックを使用してください。
import org.apache.commons.codec.binary.Base64;
public class Base64Encoding {
public static void main(String[] args) {
Base64 base64 = new Base64();
// エンコード
String strToEncode = "Hello World";
byte[] encodedBytes = base64.encode(strToEncode.getBytes());
String encodedStr = new String(encodedBytes);
System.out.println("エンコードされた文字列: " + encodedStr);
// デコード
byte[] decodedByteArr = base64.decode(encodedStr.getBytes());
String decodedStr = new String(decodedByteArr);
System.out.println("デコードされた文字列: " + decodedStr);
// 静的メソッド encodeBase64() と decodeBase64() を使って直接 API にアクセスする
String strToEncode2 = "Hello World";
String encodedStr2 = new String(Base64.encodeBase64(strToEncode.getBytes()));
String decodedStr2 = new String(Base64.decodeBase64(encodedStr.getBytes()));
}
}
コードをコンパイルして実行するには、ターミナルで次のコマンドを実行します。
javac -cp commons-codec-1.15.jar Base64Encoding.java && java -cp commons-codec-1.15.jar:. Base64Encoding
注: このコードを実行するには、Apache Commons Codec ライブラリの .jar ファイルをダウンロードしてクラスパスにインポートする必要があります。上のコマンドでは、ライブラリのクラスパスを指定するために -cp commons-codec-1.15.jar を追加しています。
まとめ
この実験では、java.util.Base64 クラスと Apache Commons ライブラリを使って Java で Base64 データをエンコードおよびデコードする方法を学びました。Basic、URL、およびファイル名用のセーフ、および MIME の 3 つの異なる Base64 エンコードおよびデコード方式について説明しました。



