English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Java内のシリアライズと外部化の違い

シリアライズと外部化は、オブジェクトをストリームバイトに変換し、バイトストリームをデータベースやメモリに保存するプロセスです。java.io.Serializableインターフェースを実装したクラスはシリアライズできます。また、アプリケーションの要件に応じて、カスタムシリアライズに外部化が使用されます。外部化はjava.io.Serializableを拡張します。 

シリアル番号キーシリアライズ外部化
1
インターフェース
シリアライズはタグインターフェースです。 
外部化にはreadExternalおよびwriteExternalという2つのメソッドが含まれています。 
2 
実現ロジック 
このインターフェースを実装するクラスは、シリアライズまたは永続化の責任をJavaに任せます。JVMはreadObjectおよびwriteObjectを使用してシリアライズを行います。 
外部化は、readExternalおよびwriteExternalメソッドをオーバーライドしてアプリケーションに実現ロジック制御を提供します。
3 
変数を無視する方法 
シリアライズ中に、JVMは瞬間変化する変数を無視してJavaオブジェクトのシリアライズおよびデシリアライズを行います。 
プログラマーは、Javaオブジェクトの外部化プロセス中に一部の変数を無視する独自のロジックを記述できます。 
4 
パフォーマンス 
シリアライズ可能なインターフェースでは、反射を使用するとパフォーマンスが低下します。
外部化は実施方法を完全に制御できます。 
5 
継承されたオブジェクトのシリアライズ 
1スーパークラスがシリアライズできない場合でも、子クラスはシリアライズできます。
2子クラスがシリアライズされていないが、スーパークラスが自動的にシリアライズされている場合 
それを外部化にも適用できます。

外部化可能な例

class ExternalizableExample implements Externalizable {
   Integer id;
   @Override
   public void writeExternal(ObjectOutput out) throws IOException {
      out.writeInt(id);
   }
   @Override
   public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
      this.id = in.readInt();
   }
}

シリアライズ可能な例

class SerializableExample implements Serializable {
   private static final long serialVersionUID = 5081877L;
   String name;
}