8

たとえば、オブジェクト インスタンスがシリアライズされた場合 ('byte[] bs1' になる)、再度シリアライズされる ('byte[] bs2' になる) 場合、'bs1' と 'bs2' は同じ長さで同じバイトを含む必要があります。 ? そうでない場合、なぜですか?

あいまいさを避けるために、同じオブジェクト (2 つの「同一の」オブジェクトではなく、同じインスタンス) の 2 つのシリアライゼーションは、同じ JVM 上の同じスレッドで、互いに数ミリ秒以内に発生したと言わなければなりません。 ) オブジェクトが 1 つ後にメソッドに渡されました。

オブジェクトはシリアライズ、デシリアライズ、再シリアライズされていないことに注意してください。2回シリアライズされているだけです。また、オブジェクトのクラスについて「賢い」ものはまったくありません。これは単なる単純な集約 POJO です。

メソッド内でオブジェクトが変更されたかどうかを検出するためのアドホック テストとして、シリアル化されたバイトを使用しています。ただし、オブジェクトの状態が明らかに変化していない例を見ているようですが、1 つの byte[] が他のものとは異なります。

私は、それらが同じであると仮定していました - そしてそれは単なる仮定でした - 。そうではないかもしれない何らかの理由がありますか?

補遺:

また、ポイントを説明するためのコード例がないことをお詫びします。現在、これは大規模なシステムに組み込まれた小さなコードです。必要に応じて、小さくて実行可能なデモを抽出しようとします。しかし、私の仮定に基本的な問題があるのではないかと思ったので、誰かが仮定が間違っている理由を説明できれば.

4

1 に答える 1

5

シリアライゼーションによって生成されるバイト シーケンスと必ずしも同じであるとは限りません。たとえばSet、単一のインスタンスについて話している場合でも、 a がその要素をシリアル化する順序が一定であるとは限りません。

于 2013-06-21T17:35:53.837 に答える