1
0

【Java】Base64にエンコード/デコードする

Posted at

はじめに

業務で担当していたPowerShellのコードに「文字列をBase64に変換している処理」があったので、JavaでBase64にエンコードする方法と、Base64からデコードする方法を調べてみました。

コード

基本的な変換処理

  • Base64にエンコード/デコードするためのクラスは、Base64.EncoderBase64.Decoderに分かれていました。
    • これらのクラスは、いずれもJava8で実装されたそうです。
  • APIのページを見る限り、Base64.EncoderBase64.Decoderのコンストラクタを直接呼び出すことはできません。
    • そのため、Base64クラスからgetEncoder()メソッドとgetDecorder()メソッドを呼び出してこれらのクラスのインスタンスを作ります。
  • 単にエンコードするだけであればencode()を使いますが、ここでは結果を文字列として受け取りたかったので encodeToString()を使っています。
Base64Sample
import java.nio.charset.StandardCharsets;
import java.util.Base64;

public class Base64Sample {

	public static void main(String[] args) {

		String txt = "nkojimaです";
		System.out.println("オリジナルの文字列:" + txt);

		// エンコード
		Base64.Encoder encoder = Base64.getEncoder();
		String encoded = encoder.encodeToString(txt.getBytes(StandardCharsets.UTF_8));
		System.out.println("エンコードした文字列:" + encoded);

		// デコード
		Base64.Decoder decoder = Base64.getDecoder();
		String decoded = new String(decoder.decode(encoded.getBytes(StandardCharsets.UTF_8)));
		System.out.println("デコードした文字列:" + decoded);
	}
}
実行結果
オリジナルの文字列:nkojimaです
エンコードした文字列:bmtvamltYeOBp+OBmQ==
デコードした文字列:nkojimaです

URLやファイル名をエンコード/デコードする場合

  • URLやファイル名をBase64エンコード/デコードする時は、Base64.getUrlEncoder()およびBase64.getUrlDecoder()を利用します。

補足:スレッドセーフについて

  • Base64.EncoderクラスとBase64.DecoderクラスのAPIのページを見ると、これらのインスタンスはともに「複数のスレッドで並行して使用できます」と書かれていました。

参考URL

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0