2010-01-09 2 views
0

직렬화 가능 인터페이스를 구현하는 클래스는 인터페이스에 메소드가 없기 때문에 정확히 구현합니다. 또한 네트워크를 통해 객체의 상태를 유지하는 데 어떻게 도움이됩니까?자바에서 Serializable 인터페이스가 필요합니까? 인터페이스에 메소드가 없기 때문에. 객체의 상태를 어떻게 유지합니까?

+0

마커 인터페이스 대신 주석을 사용할 수있었습니다. 그러나 Java 1.0 - 1.4에서는 주석을 사용할 수 없었습니다. –

답변

1

상태 자체는 유지되지 않습니다. 그러나 클래스를 직렬화가 필요한 것으로 표시하고 런타임은 해당 클래스와 그 구성 요소를 직렬화하는 것을 알고 있습니다 (transient으로 표시된 필드 제외).

명시 적으로 과도serialisable 및 필드로서 클래스를 표시하는 유용한 (즉 직렬화 생략). 그렇지 않으면 실수로 네트워크상의 전송을 위해 프로그램에서 모든 것을 직렬화 할 수 있습니다. 그럴 가능성은 당신이 원하는 것이 아닙니다. 공장과 같은 엔티티를 직렬화하고 싶지는 않을 것입니다. 암호 같은 자격 증명도 없습니다. 페이로드 크기는 말할 것도없이 :-)

0

인터페이스는 상태를 유지하지 않습니다. Remotable과 같은 마커 인터페이스입니다.

2

마커 인터페이스입니다. 즉, 여기에 추가 토론이 있습니다 : What is the use of marker interfaces in Java?

요약하면 인터페이스는 런타임에 유형 정보를 검사하는 반사 기반 코드를 통해 사용되며 해당 객체가 해당 인터페이스를 구현하면 특정 동작이 수행됩니다 (Serializable의 경우 : 객체가 스트림에 저장되거나로드됩니다. 위키

0

:이 파일에 저장된, 메모리 버퍼, 또는되도록

는 .... 직렬화 비트 시퀀스로 데이터 구조를 변환하거나 개체의 과정 네트워크 연결 링크를 통해 전송됩니다.

직렬화되지 않은 개체로는 수행 할 수없는 일련 화 된 개체로 작업을 수행 할 수 있습니다. 웹 서비스를 사용하여 클라이언트에서 서버로 데이터를 전달하는 대신 모든 정보를 직렬화 된 빈에 넣고 xml 구문 분석 및 바인딩을 피할 수 있습니다.

직렬화 된 빈을 파일로 작성하여 데이터베이스에 blob로 저장할 수 있습니다.

직렬화 된 인터페이스는 지속적인 수준과 내구성을 구현할 수있는 기능을 제공합니다.

2

일련 번호마커 인터페이스입니다. 직렬화 가능 인터페이스는 java가 구현 클래스 객체를 직렬화 할 수 있음을 인식하게합니다 (객체의 바이트 정보를 파일 또는 다른 채널에 쓰는 것을 의미). 즉, 클래스 객체를 직렬화 할 수있게하려면 클래스를 직렬화 가능 인터페이스로 플래그 지정해야합니다. 그렇지 않은 경우는, 오브젝트를 직렬화하지 않는 것처럼 IOException를 슬로우합니다.

왜이 예외가 발생합니까? 왜냐하면 개발자는 객체 직렬화에 대해 결정해야하고 나중에 동일한 객체를 직렬화하면 어떤 용도로든 사용되지 않을 것이기 때문입니다. 직렬화 개발자를 사용하지 않을 때는 자신이나 다른 개발자가 자신의 클래스를 사용하여 객체를 직렬화하려고하지 않을 것입니다. 예를 들어 Socket 클래스를 예로 들어 보겠습니다. 직렬화 가능 인터페이스를 구현하지 않을 수 있습니다. 왜냐하면 소켓 및 직렬화 애플리케이션을 직렬화하고 애플리케이션을 다시 시작하고 동일한 소켓 객체를 deserialize 할 수 있기 때문입니다. 소켓을 통해 연결된 서버가 다운되는 동안 의미 있음. 소켓 클래스 객체를 직렬화하는 용도가 있습니까?

관련 문제