私の Android アプリは、ObjectOutputStream を使用してデータをファイルに保存します。DB を使用しないという意識的な決定を下しました。最近、Android でのシリアル化が非常に遅いと見なされていることを読みました。また、Jackson + JSON を使用すると高速であると見なされます。ただし、Jackson/JSON を組み込んだ後、Jackson/JSON を使用して POJO をファイルに保存することは、シリアライゼーションよりもまったく高速ではなく、場合によってはさらに遅いようです。Jackson v2.2のコアライブラリを使用しています
と も使用してみましObjectWriters
たObjectReaders
が、速度に大きなメリットはありません。次の設定を使用していますObjectMapper
(グローバルに作成します):
mapper.setVisibility(JsonMethod.FIELD, Visibility.ANY);
mapper.setVisibility(JsonMethod.GETTER, Visibility.NONE);
mapper.setVisibility(JsonMethod.SETTER, Visibility.NONE);
mapper.setVisibility(JsonMethod.IS_GETTER, Visibility.NONE);
mapper.configure(SerializationConfig.Feature.USE_ANNOTATIONS, false);
mapper.configure(DeserializationConfig.Feature.USE_ANNOTATIONS, false);
速度の利点がないと言うとき、私がタイミングを取っているのは、約 400 個の POJO を取り、それらを別々のファイルに保存することです。私は現在、逆ではなく、シリアル化とファイルへの書き込みのタイミングをとっています。これらの POJO の半分はかなり複雑です (他の POJO のリストへの参照があります)。デバイス (Android 4.1 を実行する Galaxy Tab 10-1) でテストしています。シリアライゼーションと Jackson/JSON の両方を使用すると、プロセスに約 6 秒かかりますが、2 つのアプローチの違いは誤差の範囲内です (繰り返しテストを実行した場合の変動)。
Android での「非常に遅いシリアライゼーション」が「非常に速い」Jackson/JSON とほぼ同じになる可能性についてのアドバイスはありますか? ジャクソンを大幅にスピードアップできるアプローチはありますか?