ホームページ >Java >&#&チュートリアル >Java オブジェクトのシリアル化と逆シリアル化

Java オブジェクトのシリアル化と逆シリアル化

高洛峰
高洛峰オリジナル
2017-01-18 11:29:211328ブラウズ

この記事の例では、参考のために Java オブジェクトのシリアル化と逆シリアル化を共有します。具体的な内容は次のとおりです

1. シリアル化とは
オブジェクトをバイト ストリームに変換し、ファイルに保存するなどして保存します。このオブジェクトを後で復元するためのこのメカニズムは、オブジェクトのシリアル化と呼ばれます。 (追記: オブジェクトを永続的な記憶装置に保存することを永続化といいます)

2. シリアル化の実装方法
Java オブジェクトがこのインターフェイスを実装している場合、このクラスのオブジェクトはシリアル化可能であることを意味します。 。

3. シリアル化時の注意事項

(1) オブジェクトをシリアル化した場合、オブジェクトの非静的メンバー変数のみが保存されますが、メソッドと静的メンバー変数は保存できません。
(2) オブジェクト A はオブジェクト B を参照し、オブジェクト A はシリアル化され、B もシリアル化されます。
(3) シリアル化可能なオブジェクトにシリアル化不可能なオブジェクトへの参照が含まれている場合、シリアル化操作全体が失敗し、失敗すると NotSerializableException がスローされます。したがって、オブジェクト自体と参照オブジェクトの両方が Serializable を実装する必要があります。シリアル化を実行する前にインターフェイスを削除してください。
(4) トランジェントの使用。メンバー変数または参照がトランジェントとしてマークされている場合、オブジェクトは引き続きシリアル化できますが、ファイルにはシリアル化されません。

4. コード

public class Person implements Serializable { 
  
 private String name; 
 private transient int age; 
   
 public Person(String name, int age) { 
  super(); 
  this.name = name; 
  this.age = age; 
 } 
  
 public String toString() { 
  return this.name + "-" + this.age; 
 } 
}
public class SerializableClient { 
  
 public static void main(String[] args) throws Exception { 
  Person p1 = new Person("zhangsan", 5); 
  Person p2 = new Person("lisi", 100); 
    
  //序列化 
  FileOutputStream fos = new FileOutputStream("person.txt"); 
  ObjectOutputStream oos = new ObjectOutputStream(fos); 
    
  oos.writeObject(p1); 
  oos.writeObject(p2); 
    
  System.out.println("---------"); 
    
  //反序列化 
  FileInputStream fis = new FileInputStream("person.txt"); 
  ObjectInputStream ois = new ObjectInputStream(fis); 
    
  for(int i = 0; i < 2; i++) { 
   Person tempPerson = (Person)ois.readObject(); 
   System.out.println(tempPerson); 
  } 
 } 
}

出力結果:
---------
zhangsan-0
lisi-0
5. シリアル化と逆シリアル化のより詳細な制御

Java オブジェクトのシリアル化と逆シリアル化

上記の 2 つのプライベート メソッドがシリアル化クラスまたは逆シリアル化クラスに実装されている場合 (メソッド宣言は上記と完全に一致している必要があります)、より低レベルでより詳細な方法でシリアル化と逆シリアル化を制御できます。

以上がこの記事の全内容です。皆さんの学習に役立つことを願っています。また、皆さんも PHP 中国語 Web サイトをサポートしていただければ幸いです。

Java オブジェクトのシリアル化と逆シリアル化に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。