「何をいまさら」な感じの機能追加だけど、Java 8 から 標準のクラスライブラリで Base64 エンコーディング できるようになった。これはこれで嬉しいことなので、使い方とそのパフォーマンスをメモっておく。
使い方
まずはデモコードから。
エンコーダは以下のメソッド呼び出しで得られる 3 つの種類がある。
Base64.getEncoder()
Base64.getUrlEncoder()
Base64.getMimeEncoder()
対応するデコーダがそれぞれ用意されている。
Base64.getDecoder()
Base64.getUrlDecoder()
Base64.getMimeDecoder()
Base64.getUrlEncoder()
で得られるエンコード文字列は、普通の Base64 エンコーディングではファイルパスや URI での利用時に問題となりうる +/
の文字の代わりに -_
を使ってエンコードしてくれる。「Base64 エンコーディングした文字列をファイル名に利用したい!」みたいなケースだととっても有用だと思う。
パフォーマンス
Java 7 以前は Apache Commons Codec の Base64 クラス を使うことが一般的だったぽいので、それとの性能比較をしてみた。
今回は、メソッド呼び出しにおけるオーバーヘッドを見るスイート (上段) と、Base64 の変換処理の性能を見るスイート (下段) の二種類を用意した。
この結果から、
- 全般的に、Java 8 で導入された Base64 クラスの方が処理性能的に優れている
- 特に、Java 8 側の変換メソッドを呼び出す際のオーバーヘッドが Commons Codec のそれより明らかに小さいことがわかる
- 変換処理の性能は、エンコーディングが 6 倍程度、デコーディングが 2 倍ちょっと、Java 8 の Base64 クラスの方が速い
ということがわかるかと思う。
なお、性能測定に用いたプログラムは以下のとおり。
まとめ
- Base64 だけについて言えば、Commons Codec はその役目を終えた感がある
- これからは Java 8 の Base64 を積極的に使うのがよさそうだね!
You are truly a just right webmaster. The site loading speed is incredible. It seems that you are doing any unique trick. Also visit my site: 먹튀검증
返信削除I read tһis piece of writing completely ⅽoncerning tһe
返信削除difference of latest and ⲣreνious technologies, it’s amazing article. 온라인경마
Greetings! Very helpful advice within this article!
返信削除It is the little changes that make the greatest changes. Thanks a lot
for sharing! 토토