[Java] Base64をエンコード、デコードする方法
こんにちは。明月です。
この投稿は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をエンコード、デコードする方法に関する説明でした。
ご不明なところや間違いところがあればコメントしてください。
- [Java] Spring環境でファイルアップロード(プログレスバーでファイルアップロード状態を表示する方法)する方法2020/03/22 23:15:12
- [Java] FTPに接続してファイルをダウンロード、アップロードする方法(FTPClient)2020/03/20 02:44:36
- [Java] JSPのSpring環境でschedulerのcronを使う方法2020/03/18 00:24:32
- [Java] POIを利用してExcelを扱う方法2020/03/17 01:48:00
- [Java] PDFを出力する方法(itextpdf)2020/03/13 00:47:31
- [Java] ログライブラリ(log4j)を使う方法2020/03/12 00:54:39
- [Java] Jsonタイプのデータを使う方法(Gsonライブラリ)2020/03/11 00:30:15
- [Java] Base64をエンコード、デコードする方法2020/03/09 10:24:01
- [Java] cmdコマンドを実行するための方法2020/03/06 18:01:10
- [Java] メール(javax.mail)を発送する方法2020/03/05 20:07:49
- [Java] クラス複製(Clonable, Reflection)2020/03/05 00:03:19
- [Java] シリアライズ(直列化: Serializable)2020/03/03 00:03:33
- [Java] StringBuilderとStringBufferの差異2020/03/02 07:52:22
- [Java] Compare関数を使う方法2020/02/29 03:00:00
- [Java] 数字フォーマット(お金表示及び小数点以下表示)2020/02/28 03:00:00
- check2024/04/10 19:03:53
- [Java] 64.Spring bootとReactを連結する方法(Buildする方法)2022/03/25 21:02:18
- [Javascript] Node.jsをインストールしてReactを使う方法2022/03/23 18:01:34
- [Java] 63. Spring bootでcronスケジューラとComponentアノテーション2022/03/16 18:57:30
- [Java] 62. Spring bootでWeb-Filterを設定する方法(Spring Security)2022/03/15 22:16:37
- [Java] JWT(Json Web Token)を発行、確認する方法2022/03/14 19:12:58
- [Java] 61. Spring bootでRedisデータベースを利用してセッションクラスタリング設定する方法2022/03/01 18:20:52
- [Java] 60. Spring bootでApacheの連結とロードバランシングを設定する方法2022/02/28 18:45:48
- [Java] 59. Spring bootのJPAでEntityManagerを使い方2022/02/25 18:27:48
- [Java] 58. EclipseでSpring bootのJPAを設定する方法2022/02/23 18:11:10
- [Java] 57. EclipseでSpring bootを設定する方法2022/02/22 19:04:49
- [Python] Redisデータベースに接続して使い方2022/02/21 18:23:49
- [Java] Redisデータベースを接続して使い方(Jedisライブラリ)2022/02/16 18:13:17
- [C#] Redisのデータベースを接続して使い方2022/02/15 18:46:09
- [CentOS] Redisデータベースをインストールする方法とコマンドを使い方2022/02/14 18:33:07