標準のBase64クラスを使用した場合

android.util.Base64APIリファレンスは以下のページ。
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

改行なし。指定しないと途中で改行される為、用途によっては不具合が生じる。