Palabra clave de serialización parcial JAVA transitoria

Serialización JAVA: La serialización de un objeto en Java se refiere a la conversión de un objeto en una secuencia de bytes que contiene los datos y la información del objeto. Un objeto serializado se puede escribir en la base de datos o Los archivos también se pueden utilizar para la transmisión de red. Generalmente, cuando usamos caché (no hay suficiente espacio de memoria almacenado localmente en el disco duro) o llamamos remotamente a rpc (transmisión de red), a menudo necesitamos hacer que nuestras clases de entidad implementen la interfaz serializable. Solo para hacerlo serializable.
Por supuesto, el objetivo final después de la serialización es deserializar y restaurar el objeto Java original. Por lo tanto, la secuencia de bytes serializada se puede restaurar en un objeto Java y este proceso es la deserialización.
A menudo hay escenarios en los que algunos parámetros de una clase se serializan sin sentido. La serialización solo aumentará el tamaño del disco o la transferencia de red. Hay información confidencial en una clase, como contraseñas. La seguridad se reduce después de la serialización. Hay un objeto en una clase que no se puede serializar. Y este objeto proviene del nivel de marco o sistema. En este momento podemos usar la palabra clave transitoria. Realice la serialización parcial. La función principal de la palabra clave transitoria es: cuando el objeto se serializa (escribe una secuencia de bytes en el archivo de destino), transitoria evita que las variables declaradas con esta palabra clave en la instancia persistan; cuando el objeto se deserializa (de la fuente Secuencia de bytes de lectura de archivo para reconstrucción), dichos valores de variable de instancia no se conservarán ni se restaurarán.

Ejemplo:
aquí hay una clase de empresa:

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;
	}
}

Hay una clase de empleado

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

método de prueba:

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());
	}

}

Resultados de la prueba
Todos sabemos si Employee no implementa Serializable. Al serializar Company de esta manera, se lanzará una excepción java.io.NotSerializableException. Esto se debe a que la variable Empleado en la empresa no se puede serializar. Pero el uso de transitorios puede lograr una serialización parcial.

Supongo que te gusta

Origin blog.csdn.net/xu_coding/article/details/86654524
Recomendado
Clasificación