デビッドFrickert:
セット(オブジェクトを使用すると、同じ問題にもリードをストリームとして重要ではしていないようです)シリアル化するためにはApache Commonsの3を使用します:
HashSet<String> hashSet = new HashSet<>();
byte[] serialized = SerializationUtils.serialize(hashSet);
HashSet<String> deserialized = SerializationUtils.deserialize(serialized);
// OK, works
assertEquals(hashSet, deserialized);
byte[] serializedAfterDeserializing = SerializationUtils.serialize(deserialized);
// Nope, different!
assertArrayEquals(serialized, serializedAfterDeserializing);
誰もがバイトレベルで一致していない理由を任意のアイデアを持っていますか?
場合は問題ではないHashSet
任意の要素を持っているか、いない、でもそれは同じではありません空にされています。
使用してArrayList
、最後のアサート作品を。
ルイ・ワッサーマン:
承知しました。あなたは確かの直列化が期待すべきではないHashSet
決定論的であることを。ハッシュテーブルを使用すると、テーブルがあります正確にどのように多くの要素を知っているとき、デシリアライズ時に対ゼロから作成する場合、テーブルが異なるサイズのあることの理由のすべての種類、例えばのために異なる順序を有することができます。