« Bonjour, Amigo ! Je voudrais te parler d'un petit détail supplémentaire sur la sérialisation. »

Supposons que notre classe contient une référence à un InputStream. On ne peut pas le sérialiser, pas vrai ?

« Exact. Tu as dit toi-même que les flux ne pouvaient pas être sérialisés. Et tu ne peux pas sérialiser un objet qui a des données non sérialisables. »

« Exact. Tu as tout à fait raison. Mais que fait-on si la classe stocke des données qui ne jouent pas un rôle important dans son état mais empêchent la classe d'être considérée comme une classe sérialisable ? La classe n'a pas besoin de stocker des choses inutiles. Elle peut abandonner ces données à tout moment, et le fait peut-être même tout le temps. »

Pour ces cas, les créateurs de Java ont inventé le mot-clé transient. Si nous écrivons ce mot-clé avant une variable membre, elle sera ignorée pendant la sérialisation. Son état ne sera pas enregistré ou reconstruit. Comme si elle n'existait pas. C'est exactement ce qu'il nous faut pour les situations que nous venons d'examiner.

Tu te souviens de la mise en cache et du modificateur volatile ? Il n'y a pas de règles sans exceptions.

Voici un exemple de cette joyeuseté :

Un exemple de 'chat' avec une variable qui est invisible à la sérialisation :

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

 transient public InputStream in = System.in; 
}