Java
 Computer >> コンピューター >  >> プログラミング >> Java

Javaでのシリアル化と外部化の違い


シリアル化と外部化はどちらも、オブジェクトをストリームバイトに変換し、バイトストリームをデータベースまたはメモリに格納するプロセスです。 java.io.Serializableインターフェイスを実装するクラスはシリアル化できます。一方、アプリケーションの要件に基づいてカスタムシリアル化に使用される外部化。外部化はjava.io.Serializableを拡張します。

シリアル化 外部化
Sr。いいえ。 キー
1
インターフェース
シリアル化はマーカーインターフェイスです
外部化には、readExternalメソッドとwriteExternalメソッドの2つのメソッドが含まれています。
2
実装ロジック
このインターフェースを実装しているクラスは、Javaオブジェクトをシリアル化または永続化する責任をJVMに与えます。 JVMはシリアル化にreadObjectとwriteObjectを使用します
外部化は、readExternalメソッドとwriteExternalメソッドをオーバーライドすることにより、アプリケーションに実装ロジック制御を提供します。
3
変数を無視する方法
シリアル化では、JVMはJavaオブジェクトのシリアル化および逆シリアル化中に一時変数を無視します
プログラマーは、Javaオブジェクトの外部化中に一部の変数を無視する独自のロジックを作成できます
4
パフォーマンス
シリアル化可能なインターフェイスでは、リフレクションを使用するため、パフォーマンスが比較的低下します。
Externalizableを使用すると、実装アプローチを完全に制御できます。
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;
}

  1. Javaでのイテレータと列挙の違い

    IteratorとEnumerationはどちらも、コレクションの要素をトラバースしてアクセスするためのカーソルです。どちらもコレクションフレームワークに属しています。列挙は、コレクションフレームワークのJDK1.2バージョンのJDK1.0およびIteratorで追加されました。 コレクション内の要素への読み取り専用アクセス権があるため、列挙型はコレクション内の構造を変更できません。次の方法があります: * hasMoreElements() * nextElement() 一方、イテレータはコレクション内の要素を読み取って削除できます。以下の方法があります- * hasNe

  2. JavaでのArrayListとHashSetの違い

    HashSetとArrayListはどちらも、Javaコレクションフレームワークの最も重要なクラスの一部です。 以下は、ArrayListとHashSetの重要な違いです。 Sr。いいえ。 キー ArrayList ハッシュセット 1 実装 ArrayListはリストインターフェイスの実装です。 一方、 HashSetは、セットインターフェイスの実装です。 2 内部実装 ArrayListは、その実装のために配列を内部的に実装します。 HashSetは、実装にHashmapを内部的に使用します。 3 要素の順序 ArrayListは、挿入順序、つまり