"안녕하세요, 아미고! 연재에 대해 조금 더 자세히 말씀드리고 싶습니다."

클래스에 일부 InputStream 에 대한 참조가 포함되어 있다고 가정합니다 . 그럼 연재할 수 없겠죠?

"그렇습니다. 스트림은 직렬화할 수 없다고 직접 말씀하셨습니다. 그리고 직렬화할 수 없는 데이터가 있는 개체를 직렬화할 수 없습니다."

"맞아. 그냥 그래. 하지만 클래스가 상태에서 중요한 역할을 하지 않는 데이터를 저장하고 있으면서 직렬화 가능한 클래스로 간주되는 것을 막는다면? 클래스가 불필요한 것을 저장할 수 있다는 점은 신경쓰지 마라. 이것을 던질 수 있다. 데이터는 항상 존재하며 어쩌면 그럴 수도 있습니다."

이러한 경우에 Java 제작자는 transient 키워드를 생각해 냈습니다 . 멤버 변수 앞에 이 키워드를 쓰면 직렬화 중에 무시됩니다. 해당 상태는 저장되거나 재구성되지 않습니다. 마치 존재하지 않는 것처럼. 이것은 우리가 방금 고려한 상황에 대한 것입니다.

캐싱과 휘발성 수정자를 기억하십니까? 예외 없는 규칙은 없습니다 .

다음은 이러한 행복에 대한 한 가지 예입니다.

직렬화에 보이지 않는 변수가 있는 «cat» 예:

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

 transient public InputStream in = System.in;
}