2011-12-15 21 views
5

Map<Integer, String>をbyte[]に変換して内部ストレージに書き込むにはどうすればよいですか?私は現在持っている:マップをバイトに変換して内部ストレージに保存する方法

 try { 
      FileOutputStream fos = context.openFileOutput(Const.FILE_CATEGORIES, Context.MODE_PRIVATE); 
      fos.write(null); 
     } catch (FileNotFoundException e) { 
      // reload and create the file again 
     } 

But..Iは正しい形式にMapを取得する方法を知って、その後、私は再びそれをロードする必要が一度それはそれに戻って元の形式だデコードされません。このファイルを週に1回作成し、アプリケーションの起動時にロードする必要があります。あなたは簡単にバイトストリームに任意のシリアル化可能 オブジェクトを解析することができますJavaでシリアライズを使用して

答えて

14
  1. 。 ObjectInputStreamと ObjectOuputStreamを使用してみてください。

  2. 復元するにはjsonを使用します。 google-gsonを使用して、Java オブジェクトをJSONに、またはその逆に変換できます。

  3. アンドロイドでパーセルを使用します。 android.os.Parcelクラスは、アンドロイド(アクティビティ、サービス)のコンポーネント間でデータ を渡すように設計されていますが、引き続きデータの永続化を行うために使用できます。 differenct プラットフォームでは解析するアルゴリズムが異なる可能性があるので、インターネットにデータを送信しないでください。

シリアライズのデモを書きましたが、試してみてください。

+0

このアプローチでは、マップクラスが変更された場合、永続化されたすべての値が無効であるという欠点があります。 – belgther

0

前述のfaylonのようにシリアライズするか、独自のメカニズムを実装してマップを保存して読み込みます。保存すると、すべての要素を反復処理し、キーと値のペアを保存します。ロードすることで、それらを追加し直します。独自のメカニズムを実装すると、プログラムが別のJavaバージョンで使用されても、永続的な値を引き続き使用できるという利点があります。

関連する問題