2011-11-29 5 views
7

Guavaの不変なコレクションをシリアル化された通信で使用されるオブジェクトに使用することについて警告されました。一方のGuavaのバージョンが更新されると、シリアル化バージョンの互換性に問題が生じる可能性があります。これは有効な懸念事項ですか?Guavaの不変なコレクションのシリアル化は安定していますか?

+3

これは、どのクラスでも問題になる可能性があります。送信側と受信側でライブラリのバージョンを同じにする必要があります。 – SteveD

答えて

5

はい、これは有効な懸案事項です。

グァバプロジェクトのホームページ(http://code.google.com/p/guava-libraries/)から:すべてのオブジェクトの

直列化された形式が変更される場合があります。これらを保持せず、将来のバージョンのライブラリで読み込むことができると仮定します。

Javaネイティブシリアル化を使用している場合は、グアバはお勧めできません。

+2

通信の両端でどのバージョンが使用されているのかを制御できないのは、「良い選択ではない」ことだけです。 – SteveD

+1

それは吸う。不変のコレクションは今は安定しているはずです。なぜ彼らはシリアル化されたフォームを変更するのだろうか? –

+1

異なるバージョンのデータ構造間のシリアル化の互換性を維持することは本当に難しいです。理由のいくつかについては、この[メーリングリストのスレッド](https://groups.google.com/group/guava-discuss/browse_thread/thread/eae0b4232496d2b3/020c9f58640f2263)の後のメッセージのいくつかを参照してください。 –

7

いくつかの視点を考えてみましょう。

直列化の最も顕著な用途は以下のとおりです。

  1. は、クライアントとサーバー

グアバは、アプリケーション2には全く問題ありとの間でデータを送信する

  • 、アプリケーションの実行間でデータを保存しますクライアントとサーバーの両方で使用されているGuavaのバージョンを制御する場合さらに、GuavaはGuavaバージョン間の一貫性の一貫性を保証していませんが...実際には、直列化されたフォームはあまり変更されません。

    一方、Guavaがシリアル化されたフォームの一貫性を保証しない理由について、いくつかの視点を挙げておきます。 Guavaのリリース9と10の間でImmutableMultisetのシリアライズされたフォームを変更しました。その理由は、不変のコレクションにImmutableSortedMultisetを追加できるようにリファクタリングする必要があったためです。あなた自身が変更を確認することができますhere。シリアライズされたフォームを一貫して維持しながら、この同じリファクタリングをしようとすると、Guavaチームの哲学に対してかなり強く、厄介なハックが必要になるでしょう。 (私自身よりも専門のプログラマーがやっているかもしれませんが、それでもやりにくいと主張しています)。above linked mailing list threadで議論されているように、シリアル化の互換性を保証するには、 :グアバも開始する前に、我々はそれをあきらめた もの倍をより困難にして作られた クロスバージョンの互換性のために提供しようとすると

    とジャレド:

    根本的な問題が残っている:直列形態 すべてグアババージョン間で互換性があることを保証します。それは私の目標で、 Google Collections 1.0に向けて取り組んでいましたが、私は の難しさを認識してその目標を断念しました。クロスバージョン の互換性を実装してテストすることは、その努力に値するものではありませんでした。

    最後に、GuavaがGoogleの内部で全面的に使用され、かなり管理されていることを指摘します。

    関連する問題