La palabra clave transient se utiliza en Java para marcar los campos de una clase que deben ser excluidos del proceso de serialización: es decir, estos campos no se guardarán al serializar un objeto en un flujo de bytes.
Esto es útil cuando:
Ejemplo de uso:
import java.io.*; class User implements Serializable { private String username; private transient String password; // no se serializará public User(String username, String password) { this.username = username; this.password = password; } }
Después de la deserialización, el campo password tendrá un valor de null.
¿Qué sucederá si un campo transient es una referencia a un objeto que implementa Serializable?
Respuesta: El campo aún no se serializa; esto se refiere al campo, no al tipo de objeto. Aunque el objeto implemente Serializable, si el campo está marcado como transient, no se incluirá en la serialización del objeto donde es transient.
Ejemplo:
class Credentials implements Serializable { String password; } class Account implements Serializable { transient Credentials credentials; }
El campo credentials siempre será null después de la deserialización, incluso si Credentials es serializable.
Historia
En un banco en línea, al diseñar el objeto "Sesión de usuario", se olvidó declarar el campo de sesión de autorización como transient, lo que provocó que los objetos serializados se registraran junto con información confidencial en un archivo. Esto llevó a una filtración de datos personales.
Historia
En un servicio de corretaje, algunos campos de caché fueron serializados por defecto. Después de la recuperación del estado serializado, la aplicación comenzó a usar datos obsoletos de la caché, lo que provocó discrepancias entre las sumas reales y las mostradas en las cuentas.
Historia
Un desarrollador implementó un campo transient, suponiendo que el valor se llenaría automáticamente después de la deserialización. No implementó una estructura personalizada (readObject/writeObject), y como resultado, el campo permaneció null; el programa falló al acceder por primera vez a este campo.