4

Java でクラスをシリアライズ可能にすることの欠点を知りたいです。

メモリ割り当てとアクセシビリティの点で不利です。

このトピックに関するリンクは役に立ちます

前もって感謝します。

4

3 に答える 3

14

メモリ割り当てに関するデメリット

ゼロ。

アクセシビリティ

ゼロ。私は質問を理解していませんが、答えはまだゼロです。

特定のクラスメンバーをシリアル化したくない場合は、いつでも一時的にすることができます。これにより、そのメンバーを含むクラスに関連するシリアル化のオーバーヘッドが節約されます。

行為implements Serializable自体にはマイナスの結果はありません。

「安全」とはどういう意味かわかりませんが、シリアライゼーションをディープ コピーに使用することは確かに機能します。

于 2013-05-28T10:11:10.500 に答える
1

実際、私が考えることができる唯一の欠点は、オブジェクトの疑似コンストラクターを公開することです。たとえば、従来のシングルトンをシリアライズ可能にする場合は、'readResolve' メソッドも導入する必要があります。
それ以外、デメリットはありません。

ディープ コピーに関しては、ネイティブの memcpy を使用することではるかに高速に動作するため、Clonable 機能を使用する必要があります。

于 2013-05-28T10:17:39.810 に答える
1

Java とそのセッション オブジェクトを見ると、純粋なオブジェクトのシリアル化が使用されています。
アプリケーション セッションの有効期間がかなり短く、つまり長くても数時間であると仮定すると、オブジェクトのシリアライゼーションは単純で、適切にサポートされ、Java のセッションの概念に組み込まれています。
ただし、データの永続性が数日または数週間に及ぶ場合があり、アプリケーションの新しいリリースについて心配する必要がある場合、シリアル化はすぐに悪になります。
優れた Java 開発者なら誰でも知っているように、オブジェクトをシリアル化する場合は、セッションであっても、1L だけでなく実際のシリアル化 ID (serialVersionUID) が必要であり、Serializable インターフェイスを実装する必要があります。
ただし、ほとんどの開発者は、Java デシリアライゼーション プロセスの背後にある実際のルールを知りません。
オブジェクトに単純なフィールドを追加するだけでなく、オブジェクトが変更された場合、シリアライゼーション ID が変更されていなくても、Java がオブジェクトを正しくデシリアライズできない可能性があります。
突然、データを取得できなくなりますが、これは本質的に悪いことです。

https://softwareengineering.stackexchange.com/questions/191269/java-serialization-advantages-and-disadvantages-use-or-avoidにアクセスしてください

于 2013-05-28T09:58:34.747 に答える