JAVA部分シリアル化キーワード一時的

JAVAシリアル化:Javaでのオブジェクトのシリアル化とは、オブジェクトを、オブジェクトのデータと情報を含むバイトシーケンスに変換することです。シリアル化されたオブジェクトは、データベースに書き込むことができます。ファイルはネットワーク送信にも使用できます。一般に、キャッシュを使用する場合(十分なメモリスペースがローカルにハードディスクに保存されない場合があります)、またはリモートでrpcを呼び出す場合(ネットワーク送信)、エンティティクラスにSerializableインターフェイスを実装させる必要があります。シリアル化できるようにするためだけに。
もちろん、シリアル化後の最終的な目標は、元のJavaオブジェクトを逆シリアル化して復元することです。したがって、シリアル化されたバイトシーケンスをJavaオブジェクトに復元でき、このプロセスは逆シリアル化です。
クラス内の一部のパラメーターが無意味にシリアル化されるシナリオがよくあります。シリアル化は、ディスクまたはネットワーク転送のサイズを増やすだけです。クラスには、パスワードなどの機密情報がいくつかあります。シリアル化後、セキュリティが低下します。クラスにシリアル化できないオブジェクトがあります。そして、このオブジェクトはフレームワークまたはシステムレベルから来ています。現時点では、transientキーワードを使用できます。部分的なシリアル化を実現します。トランジェントキーワードの主な機能は次のとおりです。オブジェクトがシリアル化されると(バイトシーケンスをターゲットファイルに書き込む)、トランジェントはインスタンスでこのキーワードで宣言された変数が永続化するのを防ぎます。オブジェクトがデシリアライズされると(ソースから)再構築のためのファイル読み取りバイトシーケンス)、そのようなインスタンス変数値は永続化および復元されません。

例:
Companyクラスは次のとおりです。

public class Company implements Serializable{
	private String companyName;
	private String companyAddress;
	private String companyEmail;
	private transient List<Employee> employees;
	
	public Company(String companyName, String companyAddress, String companyEmail, List<Employee> employees) {
		this.companyName = companyName;
		this.companyAddress = companyAddress;
		this.companyEmail = companyEmail;
		this.employees = employees;
	}
}

従業員クラスがあります

public class Employee implements Serializable{
	private String Name;
	private String phone;
	public Employee(String name, String phone) {
		Name = name;
		this.phone = phone;
	}
}

テスト方法:

public class TestSerializable {

	public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {
		Employee employee1 = new Employee("张三","1234");
		Employee employee2 = new Employee("张四","1234");
		Employee employee3 = new Employee("张五","1234");
		List<Employee> employees = new ArrayList();
		employees.add(employee1);
		employees.add(employee2);
		employees.add(employee3);
		Company company = new Company("百度","百度大厦","3333",employees);
		
		ObjectOutputStream o = new ObjectOutputStream(new FileOutputStream("rectangle"));
        // 往流写入对象
        o.writeObject(company);
        o.close();
        System.out.println("反序列化之前的雇员" + company.getEmployees());
        // 从流读取对象
        ObjectInputStream in = new ObjectInputStream(new FileInputStream("rectangle"));
        Company company1 = (Company)in.readObject();
        
        System.out.println("反序列化之后的雇员" + company1.getEmployees());
	}

}

試験結果
EmployeeがSerializableを実装していないかどうかは誰もが知っています。この方法でCompanyをシリアル化すると、例外java.io.NotSerializableExceptionがスローされます。これは、Companyの変数Employeeをシリアル化できないためです。ただし、トランジェントを使用すると、部分的なシリアル化を実現できます。

おすすめ

転載: blog.csdn.net/xu_coding/article/details/86654524