2011-05-11 2 views

답변

12

도움이 될 것입니다. 예를 들어 FileOutputStream은 열린 파일 핸들을 나타 내기 때문에 실제로는 직렬화 할 수 없습니다. Socket에 대해서도 마찬가지입니다. "열린 소켓"을 저장하고 복원 할 수는 없습니다.

해당 유형의 필드가있는 개체를 직렬화하려면 해당 필드를 일시적으로 표시해야합니다.

transient을 사용하는 또 다른 이유는 클래스가 일종의 내부 캐싱을 수행하는 경우입니다. 예를 들어, 클래스가 계산을 수행 할 수 있고 성능상의 이유로 각 계산의 결과를 캐시하면 캐시를 저장하는 것이 바람직하지 않을 수 있습니다 (캐시를 다시 계산하는 것이 캐시 복원보다 빠르기 때문이거나 오래된 캐시 된 값이 모든 용도의). 이 경우 캐싱 필드를 일시적으로 표시합니다.

+0

좋은 설명. FileOutputStream transient와 같은 필드를 설정하지 않으면 serialization/de-serialization 중에 예외가 발생합니다. –

0

변수/필드를 직렬화하고 싶지 않으면 일시적으로 표시하십시오. 은행 잔고, 신용 카드 정보 등 우리가 누군가를 직렬화 할 수 있다면 그것을 직렬화하고 사용할 수 있습니다.

4

예, 보안과 관련 될 수 있지만 그 이유는 필드의 데이터가 다른 필드에서 파생 되었기 때문이며 그 경우에는 보낼 이유가 없습니다. 가능한 경우 대역폭을 절약하십시오.

0

해당 필드 중 하나에 사용자 이름과 암호가있는 클래스를 고려하십시오. 또한 직렬화 후에 네트워크에서이 객체를 전달하고 일부를 비 직렬화하는 것을 고려하십시오.

는 scenerios에서 과도들은 관리 Java 환경의 외부 자원을 나타 내기 때문에 일부 클래스는 본질적으로 직렬화하지

관련 문제