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