2026年2月22日日曜日

【Java進化史 第23回】Java8でBase64は何がどう変わったのか 〜 地味だが確かな進化 〜

【Java進化史 第23回】Java8でBase64は何がどう変わったのか 〜 地味だが確かな進化 〜

風の噂で聞いた。

Java8でBase64が正式に追加されたらしい。

「いや、前からあっただろう?」

そう思った人も多いはずだ。

確かに、Java7以前でもBase64は使えていた。


// Java7以前(内部API)
import sun.misc.BASE64Encoder;
import sun.misc.BASE64Decoder;

// 内部実装。公式仕様ではない
BASE64Encoder encoder = new BASE64Encoder();
String encoded = encoder.encode("Hello".getBytes());

使えてはいた。

しかし、sun.* は内部API。

将来の保証はない。

そしてJava8で、正式APIが追加された。

■ Java8で追加されたBase64


import java.util.Base64;

String original = "Hello Java8";

// 通常のBase64エンコード
String encoded = Base64.getEncoder()
                       .encodeToString(original.getBytes());

// デコード
String decoded = new String(
        Base64.getDecoder().decode(encoded)
);

java.util.Base64。

内部APIから、正式仕様へ。

これが最大の変化だ。

■ 何がどう変わったのか

① 内部API → 標準APIへ

  • Java7以前:sun.misc(内部API)
  • Java8以降:java.util.Base64(正式サポート)

安心して使える。

地味だが、これは大きい。

② 用途別に整理された


// 改行なし(一般的な用途)
Base64.getEncoder();

// URL安全(+ と / を置換)
Base64.getUrlEncoder();

// MIME形式(76文字ごとに改行)
Base64.getMimeEncoder();

以前は用途の区別が曖昧だった。

Java8では、意図がAPIに現れている。

③ 改行仕様が明確になった

  • 通常Encoder:改行しない
  • MIME Encoder:76文字ごとにCRLF改行

メール添付や一部仕様では、 この違いが重要になる。

④ 例外仕様が整理された


try {
    Base64.getDecoder().decode("不正な文字列");
} catch (IllegalArgumentException e) {
    // 不正なBase64文字列
}

decode時の挙動も明確だ。

■ 地味だが、いい進化

Java8はラムダやStreamが目立つ。

しかしその裏で、 こうした基盤の整備も行われていた。

派手ではない。

だが確実に実務を支える変更だ。

地味だが、いい進化だなぁと思う。




0 件のコメント:

コメントを投稿

【Java進化史 第23回】Java8でBase64は何がどう変わったのか 〜 地味だが確かな進化 〜

【Java進化史 第23回】Java8でBase64は何がどう変わったのか 〜 地味だが確かな進化 〜 風の噂で聞いた。 Java8でBase64が正式に追加されたらしい。 「いや、前からあっただろう?」 そう思った人も多いはずだ。 確かに、Java...