2009-03-03 14 views
19

可能性の重複:
What is object serialization?Javaのシリアル化とは何ですか?

私はSwingを使っ小さなRSSリーダーアプリを作ったとEclipseは、「直列化可能クラスMochaRSSViewがの静的最終のserialVersionUIDフィールドを宣言していない私に言って続けてタイプlong "

シリアライゼーションとはどのような利点がありますか?

+0

詳細については、重複の可能性を参照してください。 –

答えて

41

Serializableは、オブジェクトの状態をストリームに書き出すことができるマーカーインターフェイスです(基本的にすべてのメンバーを読み込み、ストリームやディスクなどに書き出すことができます)。デフォルトのメカニズムはバイナリ形式です。また、オブジェクトを複製したり、呼び出し間に状態を保持したり、ネットワーク経由でオブジェクトを送信したりすることもできます。

eclipseが生成する(基本的には長いがランダムなIDです)。つまり、クラスがシリアライズされたバージョンと互換性があると考えるかどうかを制御することができます。

(注:一時的でないメンバ変数はすべてシリアライズ可能なクラスである必要があります。エラーが発生します.JVMは各オブジェクトの状態を書き込みプリミティブのレベルまで書き出しますObjectOutputStreamに渡します)。

6

シリアライゼーションは、オブジェクトを読み取り可能なフォームに書き込み、異なる時間にオブジェクトを再作成できるようにします。 コンピュータAで1つのJVMでウィジェットを作成してシリアライズして保存し、それを別のコンピュータBに送信した場合、他のJVmはそれを逆シリアル化して同じ値と構造で再作成できます

4

Serializationは、オブジェクトを後で再ロードするためにディスクに保存可能なフォーマットに変換するプロセスです。詳細については、リンクを確認してください!

2

シリアル化オブジェクト(クラスのインスタンス)を取り、輸送のためにそれを設定する方法です - ネットワークを介して、ディスクへ、など

6

Javaシリアライゼーションはオブジェクト構造を永続化する方法です。

serialVersionUIDをコンパイル時定数としてprivate static final longと宣言することをお勧めします。これは、オブジェクトデータとクラスコードが互換性があると主張されているかどうかをチェックするために使用されます。

Eclipseはなぜこのことについてあなたに伝えていますか?おそらく、あなたが拡張している(または潜在的にあなたが実装している)クラスは、java.io.Serializableを実装しています。これは、あなたを含むすべてのサブタイプがシリアライズ可能であることを意味します。ほとんど確かにあなたは気にしません。クラスまたはパッケージに@SuppressWarnings("serial")package-info.java)を適用して、警告をクリアすることができます。あなたが強制的にシリアライズされているクラスのインスタンスを防ぎたい場合は、(メモリから)を追加します

private static final java.io.ObjectStreamField[] serialPersistentFields = { 
    null 
}; 
private void writeObject(
    java.io.ObjectOutputStream ou 
) throws java.io.IOException { 
    throw new java.io.NotSerializableException(); 
} 
private void readObject(
    java.io.ObjectInputStream in 
) throws java.io.IOException, java.lang.ClassNotFoundException { 
    throw new java.io.NotSerializableException(); 
} 
private void readObjectNoData(
) throws java.io.ObjectStreamException { 
    throw new java.io.NotSerializableException(); 
} 

多くの人々がそれに信用を与えるよりも、はるかに優れていますが、それは(おそらく世界で最高の考え抜かシステムではありませんために)。

28

Javaシリアル化-----シリアライズされたオブジェクトの内部を見たことがありますか?私はあなたにjavaのシリアル化が何であるかを説明し、シリアル化のサンプルを提供します。最後に最も重要なことは、シリアライズされたオブジェクトの内部とその意味を調べることです。それはJavaの直列化の内部であり、どのように動作します。独自のjava直列化を実装したい場合は、この記事では優れたプラットフォームを紹介します。

Javaシリアル化とは何ですか? Java直列化の第一の目的は、オブジェクトをストリームに書き込むことで、ネットワークを介して転送することができ、そのオブジェクトを再構築することができます。 2人の異なる関係者が関わっている場合は、まったく同じオブジェクトを再構築するためのプロトコルが必要です。 Javaのシリアル化APIはあなたにそれを提供します。シリアライゼーションの機能を活用できる他の方法は、それを使って詳細コピーを実行することです。

上記の定義で「主目的」を使用した理由は、データベースの代わりにjava直列化を使用することがあります。セッション間でオブジェクトを永続化できるプレースホルダです。これはJavaの直列化の主な目的ではありません。時には、私がJavaの候補者にインタビューするとき、私は、java直列化が(オブジェクトを保存するために)オブジェクトを格納し、それを取得するために使用されていると言います。彼らはそれをデータベースと同義に使用します。これは、シリアライズの誤った認識です。

どのようにシリアル化しますか? オブジェクトをシリアライズする場合は、それぞれのクラスでマーカーインタフェースをシリアライズ可能に実装する必要があります。このJavaクラスを直列化できることをコンパイラに通知するだけです。直列化してはならないプロパティを一時的なものとしてタグ付けすることができます。ストリームを開いてオブジェクトをストリームに書き込みます。 Java APIはシリアライゼーションプロトコルを処理し、プロトコルに準拠したファイル内にJavaオブジェクトを保持します。デシリアライゼーションは、オブジェクトを元の形式に戻す処理です。

ここで、プロトコルとは、シリアライズする人とデシリアライズする人の間の理解を意味します。シリアライズされたオブジェクトを含むファイルの内容は何ですか?

+23

このリンクからコピーされますか?少なくとも言葉を変えてみてください。 http://javapapers.com/core-java/java-serialization/ – Konza

関連する問題