標準のBase64クラスを使用した場合
android.util.Base64のAPIリファレンスは以下のページ。
http://developer.android.com/intl/ja/reference/android/util/Base64.html
入力がbyte配列であり、オブジェクトをそのまま渡すことはできないので、
クラスなどを渡す場合、自前でbyteに変換してから、Base64に変換する必要がある。
プリミティブな型であればbyteへの変換もさほど苦ではないが、
実際にはオブジェクトを変換することも多いと思われるので、
オブジェクトからbyte配列への変換、byte配列からオブジェクトへの変換を行うための
ユーティリティクラスを用意しておくことが望ましいと思われる。
/** * SDK8以上で追加されたandroid.util.Base64クラスを使った変換テスト * @throws IOException * @throws ClassNotFoundException */ public void base64Check() throws IOException, ClassNotFoundException { Log.i("Base64Check","start"); SampleClass sc = new SampleClass(); sc.setId("test"); Log.i("変換前0",sc.getId()); byte[] bo = SerializeUtil.fromObjectToBinary(sc); //変換オプション //Base64.URL_SAFE (RFC3548参照) // URL 用に安全なアルファベット集合をもちいて文字列 s をエンコード (符号化) します。 // これは、標準の Base64 アルファベット集合にある + のかわりに - を使い、 / のかわりに _ を使用します。 //Base64.NO_WRAP 改行なし String value = android.util.Base64.encodeToString(bo, android.util.Base64.URL_SAFE|android.util.Base64.NO_WRAP); Log.i("変換後1object",value); byte[] by = android.util.Base64.decode(value, android.util.Base64.URL_SAFE|android.util.Base64.NO_WRAP); SampleClass ret = (SampleClass)SerializeUtil.fromBinaryToObject(by); Log.i("変換後2",ret.getId()); Log.i("Base64Check","end"); }
変換のオプションとして、指定したほうが望ましいと思われるのが、以下の2つ。
- Base64.URL_SAFE (RFC3548参照)
URL 用に安全なアルファベット集合をもちいて文字列 s をエンコード (符号化) します。標準の Base64 アルファベット集合にある + のかわりに - を使い、 / のかわりに _ を使用します。
http://www.python.jp/doc/2.4/lib/module-base64.html
- Base64.NO_WRAP
改行なし。指定しないと途中で改行される為、用途によっては不具合が生じる。