[Java] Base64をエンコード、デコードする方法


Devlopment note / Java    作成日付 : 2020/03/09 10:24:01   修正日付 : 2020/03/26 02:21:30

こんにちは。明月です。


この投稿はJavaでBase64をエンコード、デコードする方法に関する説明です。


Base64とは実は様々な複雑な説明がありますが、私が簡単に説明するとbyteタイプになっているbinaryデータをプログラム間にデータ交換をため、ascii文字に変換しているコードをbase64といいます。

つまり「byteデータやstreamデータをStringのタイプに変換すること、Stringの値はcharのデータ範囲を超えない(データ値が127)ものになっている」ということです。


先に簡単なファイルをIOで読み込んでbase64に変換します。

pcに「hello world」という値がある「test.txt」を準備しました。


そしてそれを読み込んだらbyteタイプのbinaryになります。そのbinaryをbase64に変換します。

import java.io.File;
import java.io.FileInputStream;
import java.util.Base64;

public class ReadBase64 {
  // 実行関数
  public static void main(String[] args) {
    // test.txtファイルを読み込む
    byte[] binary = getFileBinary("d:\\work\\test.txt");
    // base64のライブラリからencodeToStringを利用してbinaryタイプ(byte[])をbase64(Stringタイプ)に変換する。
    String base64data = Base64.getEncoder().encodeToString(binary);
    // コンソールに結果を出力する。
    System.out.println(base64data);
  }
  // ファイルを読み込む関数。
  private static byte[] getFileBinary(String filepath) {
    // Fileクラスを割当てする。
    File file = new File(filepath);
    // ファイルサイズでbyteバッファを割り当てする。
    byte[] data = new byte[(int) file.length()];
    // IOのストリームを取得する。
    try (FileInputStream stream = new FileInputStream(file)) {
      // ファイルを読み込む。
      stream.read(data, 0, data.length);
    } catch (Throwable e) {
      e.printStackTrace();
    }
    // binaryを返却。
    return data;
  }
}

実行結果は下記とおりになります。


それが「hello world」のbase64コードです。


またbase64コードになっているデータを元のbinary(byte[])データに変換しましょう。

import java.util.Base64;

public class ReadBase64 {
  // 実行関数
  public static void main(String[] args) {
    // 上でエンコードした「base64」データです。
    String base64data = "SGVsbG8gd29ybGQ=";
    // binaryデータ(byte[])にデコードする。
    byte[] binary = Base64.getDecoder().decode(base64data);
    // 結果をコンソールに出力する。
    System.out.println(new String(binary));
  }
}

実行結果は下記とおりになります。


base64タイプをbyteタイプに変換しました。byteデータをStringタイプに変換して出力すると「hello world」が出ます。


実はプログラム間に通信する時にbase64にエンコードやデコードにするとデータ長さが増えるので非効率です。

でも、base64を使うところはbinaryをStringに表現するところはイメージデータをStringデータで格納する時や、暗号化されたファイルをStringデータとしてデータをデータ通信する時にはよく使います。


ここまでJavaでBase64をエンコード、デコードする方法に関する説明でした。


ご不明なところや間違いところがあればコメントしてください。

最新投稿