"Ciao, Amigo! Vorrei raccontarti un altro piccolo dettaglio sulla serializzazione."

Supponiamo che la nostra classe contenga un riferimento a qualche InputStream . Quindi non può essere serializzato, giusto?

"Giusto. Tu stesso hai detto che i flussi non possono essere serializzati. E non puoi serializzare un oggetto che ha dati non serializzabili."

"Giusto. Proprio così. Ma cosa succede se la classe archivia dati che non svolgono un ruolo significativo nel suo stato e tuttavia impedisce alla classe di essere considerata una classe serializzabile? Non importa se una classe potrebbe archiviare cose non necessarie. Potrebbe lanciare questo dati in qualsiasi momento e forse lo fa anche sempre".

Per questi casi, i creatori di Java hanno escogitato la parola chiave transient . Se scriviamo questa parola chiave prima di una variabile membro, verrà ignorata durante la serializzazione. Il suo stato non sarà salvato né ricostruito. Come se non esistesse. Questa è la cosa giusta per le situazioni che abbiamo appena considerato.

Ricordi la memorizzazione nella cache e il modificatore volatile ? Non ci sono regole senza eccezioni .

Ecco uno di questi esempi di questa felicità:

Un esempio «gatto» con una variabile invisibile alla serializzazione:

Codice
class Cat implements Serializable
{
 public String name;
 public int age;
 public int weight;

 transient public InputStream in = System.in; 
}