– Cześć, Amigo! Chciałbym zdradzić Ci jeszcze jeden mały szczegół odnośnie serializacji.

Załóżmy, że nasza klasa zawiera odwołanie do jakiegoś InputStream. Wtedy nie może być serializowana, prawda?

– Racja. Sam mówiłeś, że strumienie nie mogą być serializowane. I nie można serializować obiektu zawierającego dane, których nie można serializować.

– Racja. Właśnie tak. Ale co jeśli klasa przechowuje dane, które nie wpływają znacząco na jej stan, a jednocześnie uniemożliwiają uznanie jej za klasę serializowalną? Nieważne, że klasa może przechowywać niepotrzebne rzeczy. Mogłaby wyrzucić te dane w każdej chwili, a może nawet robi to - cały czas.

Dla takich przypadków projektanci Javy wymyślili słowo kluczowe transient. Jeśli napiszemy to słowo kluczowe przed zmienną składową, będzie ona ignorowana podczas serializacji. Jej stan nie zostanie zapisany ani zrekonstruowany. Tak jakby nigdy nie istniała. To jest właśnie rozwiązanie sytuacji, o której przed chwilą rozmawialiśmy.

Pamiętasz buforowanie i modyfikator volatile? Nie ma reguł bez wyjątków..

Oto jeden z przykładów, który to potwierdza:

Przykład «cat» ze zmienną, która jest niewidoczna dla serializacji:

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

 transient public InputStream in = System.in; 
}