Guavaの不変なコレクションをシリアル化された通信で使用されるオブジェクトに使用することについて警告されました。一方のGuavaのバージョンが更新されると、シリアル化バージョンの互換性に問題が生じる可能性があります。これは有効な懸念事項ですか?Guavaの不変なコレクションのシリアル化は安定していますか?
答えて
はい、これは有効な懸案事項です。
グァバプロジェクトのホームページ(http://code.google.com/p/guava-libraries/)から:すべてのオブジェクトの
直列化された形式が変更される場合があります。これらを保持せず、将来のバージョンのライブラリで読み込むことができると仮定します。
Javaネイティブシリアル化を使用している場合は、グアバはお勧めできません。
通信の両端でどのバージョンが使用されているのかを制御できないのは、「良い選択ではない」ことだけです。 – SteveD
それは吸う。不変のコレクションは今は安定しているはずです。なぜ彼らはシリアル化されたフォームを変更するのだろうか? –
異なるバージョンのデータ構造間のシリアル化の互換性を維持することは本当に難しいです。理由のいくつかについては、この[メーリングリストのスレッド](https://groups.google.com/group/guava-discuss/browse_thread/thread/eae0b4232496d2b3/020c9f58640f2263)の後のメッセージのいくつかを参照してください。 –
いくつかの視点を考えてみましょう。
直列化の最も顕著な用途は以下のとおりです。
- は、クライアントとサーバー
グアバは、アプリケーション2には全く問題ありとの間でデータを送信する
一方、Guavaがシリアル化されたフォームの一貫性を保証しない理由について、いくつかの視点を挙げておきます。 Guavaのリリース9と10の間でImmutableMultisetのシリアライズされたフォームを変更しました。その理由は、不変のコレクションにImmutableSortedMultisetを追加できるようにリファクタリングする必要があったためです。あなた自身が変更を確認することができますhere。シリアライズされたフォームを一貫して維持しながら、この同じリファクタリングをしようとすると、Guavaチームの哲学に対してかなり強く、厄介なハックが必要になるでしょう。 (私自身よりも専門のプログラマーがやっているかもしれませんが、それでもやりにくいと主張しています)。above linked mailing list threadで議論されているように、シリアル化の互換性を保証するには、 :グアバも開始する前に、我々はそれをあきらめた もの百倍をより困難にして作られた クロスバージョンの互換性のために提供しようとすると
。
とジャレド:
根本的な問題が残っている:直列形態 すべてグアババージョン間で互換性があることを保証します。それは私の目標で、 Google Collections 1.0に向けて取り組んでいましたが、私は の難しさを認識してその目標を断念しました。クロスバージョン の互換性を実装してテストすることは、その努力に値するものではありませんでした。
最後に、GuavaがGoogleの内部で全面的に使用され、かなり管理されていることを指摘します。
- 1. 不変性とXMLシリアル化
- 2. XMLシリアル化を使用して親ノードなしでコレクションをシリアル化する
- 3. なぜGuava Multimap.values()はコレクションのコレクションではなくフラットなコレクションを返しますか?
- 4. ハッシュがテキストの小さな変化に安定しています
- 5. 不変のコレクションですか?
- 6. 不変なコレクションの実装
- 7. MySQLの不安定なクエリタイムズ
- 8. Angular.jsが不安定なバージョンのCDNはありますか?
- 9. スカラーソーティングは安定していますか?
- 10. MongoDBは安定していますか?
- 11. raw boost :: variantをシリアル化するのは安全ですか?
- 12. IE7で不安定なスクロール
- 13. キャンバスで不安定なアニメーション
- 14. ネットワークを介した安全なC構造体のシリアル化? - C++
- 15. どちらのオープンソースプロジェクトでも、不安定で安定したバージョンのバージョンを使用しています
- 16. ステートフルなxxxServerHandleと不安定なyyyServerhandleの違いは?
- 17. eglSwapBuffersが不安定/遅い
- 18. iPad 2ビデオサブシステムは不安定ですか?
- 19. Json.netは派生型をシリアル化/逆シリアル化しますか?
- 20. コレクションをシリアル化してPythonで解析する
- 21. RabbitMQの不安定な接続
- 22. プロデューサ/コンシューマキューの不安定なデッドロック
- 23. 不安定なDLLの参照
- 24. WCFコレクションのシリアル化、IListまたはList?それは問題ですか?
- 25. コレクションを英数字の文字列としてシリアル化する方法は?
- 26. ASP.NETでのHTTPヘッダーの制御の不安定化
- 27. JavascriptとActionscript 3 [変数の不安定さの設定]
- 28. NSViewリサイズ不安定
- 29. UserControlコレクションはシリアル化可能ではありません
- 30. Ruby on Rails、delayed_job GMTとしての不正な日時のシリアル化
これは、どのクラスでも問題になる可能性があります。送信側と受信側でライブラリのバージョンを同じにする必要があります。 – SteveD