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

Javaではシリアライズ可能なインスタント変数はなぜありませんか?

シリアライズは、オブジェクトのデータおよびオブジェクトのタイプに関する情報、およびオブジェクトに保存されているデータのタイプに関する情報を含むバイトシーケンスとしてJavaオブジェクトを永続化するプロセスです。シリアライズは、Javaオブジェクトの値/状態をバイトに変換して、ネットワークを通じて送信したり保存したりします。一方、アンシリアライズはバイトコードを対応するJavaオブジェクトに変換します。

瞬時変数はシリアライズの過程でシリアライズされない変数です。その変数をアンシリアライズするとき、その変数のデフォルト値を取得します。

文法

private transient <メンバー-変数>;

import java.io.*;
class EmpInfo implements Serializable {
   String name;
   private transient int age;
   String occupation;
   public EmpInfo(String name, int age, String occupation) {
      this.name = name;
      this.age = age;
      this.occupation = occupation;
   }
   public String toString() {
      StringBuffer sb = new StringBuffer();
      sb.app*end("名前:");+"\n");
      sb.append(this.name+"\n");
      sb.append("年齢:");+ "\n");
      sb.append(this.age + "\n");
      sb.append("職業:"); + "\n");
      sb.append(this.occupation);
      return sb.toString();
   }
}
// メインクラス
public class TransientVarTest {
   public static void main(String args[]) throws Exception {
      EmpInfo empInfo = new EmpInfo("Adithya", 30, "Java開発者");
      ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("empInfo"));
      oos.writeObject(empInfo);
      oos.close();
      ObjectInputStream ois = new ObjectInputStream(new FileInputStream("empInfo"));
      EmpInfo empInfo1 = (EmpInfo)ois.readObject();
      System.out.println(empInfo1);
   }
}

出力結果

名前:
Adithya年齢:
職業:
Java開発者