2013-11-02 1 views
0

java의 직렬화에 대한 설명이 필요합니다. 개체를 serialize하는 경우 해당 개체를 RMI 위로 반환하려면 개체의 사용자 지정 클래스에 serializable 만 구현하면됩니까? 나는 objectoutputstream과 objectinputstream을 보았지만, 나는 그것들을 사용해야하는지 잘 모르겠다. 두 번째 질문은 arraylist를 직렬화 할 수있는 방법은 무엇입니까? 내 세 번째 질문은 아마도 내 첫 번째 질문과 관련이 있지만 객체를 반환하기 전에 마샬링하는 방법은 무엇입니까? 객체를 직렬화하면 프로세스에서 그것을 직렬화합니까? RMI serialization/marshal

는 질문 문장의 클래스 호출 할 수 있습니다 :

public class Sentence implements Serializable { 

} 

을 그리고 난 그 클래스의 인스턴스를 생성하고 다른 클래스에서 객체를 반환

+0

'Serializable'으로 클래스에 서명하기 마샬링과 언 마샬링은 JVM (낮음) 수준의 것입니다. –

답변

2
  1. 예 : 직렬화 가능 객체를 참조하지 않는 한 Serializable을 구현하면 객체를 직렬화 할 수 있습니다. 객체 스트림은 RMI가 내부적으로 객체를 보내고받는 데 사용됩니다. RMI를 사용할 경우에는 사용할 필요가 없습니다. 소켓을 사용하여 객체를 보내거나 파일에 저장하려면 객체를 사용할 수 있습니다.

  2. ArrayList는 이미 직렬화 가능합니다. javadoc을 봐라. 아무 것도 할 필요가 없습니다.

  3. RMI 메서드에서 개체를 반환하기 만하면 RMI에서이를 직렬화합니다. 직렬화와 마샬링은 기본적으로 같은 것을 의미하는 두 단어입니다. 같은 방법으로, RMI 메소드가 인수를 취하는 경우, RMI는 인수로서 건네받은 객체를 직렬화 해 RMI 서버에 보내, RMI 서버는 그것을 직렬화 복원 해, 실제의 메소드를 호출합니다. RMI에 의해 모두 완료되었습니다.

+0

모든 것이 RMI에 의해 완료되었습니다. 원격 객체에 대한 참조를 얻고, 객체가 원격 객체가 아닌 것처럼 그것을 호출하고, RMI가 인자를 직렬화하고, 객체를 서버로 보내고, 서버에서 직렬화 해제하고, 메소드를 호출하고, 반환 값을 직렬화하는 작업을 수행합니다 , 클라이언트에게 돌려 보내, 리모트 메소드를 호출 한 클라이언트에 돌려 준다. –

+0

네, 네 답을 찾아야 겠어. – user2644819

1

Serializable마커 인터페이스라고 무엇을 할 것; Java에 특정 클래스를 구현하지 않아도 클래스에 몇 가지 기능이 있음을 알립니다. 클래스에 구현하면 Java 객체의 필드를 가져 와서 나중에 또는 다른 컴퓨터에서 사용할 수 있도록 패키지화 된 양식으로 변환하는 것이 중요합니다 (의미 있음) JVM에 알립니다.

의 모든 필드가 Serializable 인 경우 그게 전부입니다. Serializable이 아닌 필드 (예 : 네트워크 연결 또는 기본 리소스를 보유하는 필드)를 사용하는 경우 (직렬화에서 무시 됨)을 표시하고 readObject을 재정 의하여 클래스가 직렬화 해제 될 때 다시 설정해야합니다 및/또는 writeObject.

+0

정보를 보내 주셔서 감사합니다. +1 – user2644819