1

하나의 Java 프로그램/클래스에서 직렬화 가능 객체의 인스턴스를 선언 한 다음 다른 프로그램/클래스의 내부 객체에 대한 정의를 완전히 반복하여 큰 복합 객체로로드 할 수 있습니까? 데이터 파일에서? 목표는 빌드 머신에서 로컬로 유지되는 항목에 대한 편집기를 작성한 다음 게임 자체를 작성하고 게임을하고 싶은 사람들에게 배포하는 것입니다.Java 직렬화 된 객체의 전송

취미 프로젝트로 Java로 게임을 작성하고 있습니다. 내 게임에는 부모 클래스 인 GameItem을 확장하는 클래스 패밀리가 있습니다. 아이템은 HealingPotion, Bomb, KeyItem 등과 같은 다양한 패밀리에있을 수 있습니다. 내가 원하는 무엇

class GameItem implements Serializable { 
String ItemName 
String ImageResourceLocation 
....} 

당신이 게임을 발생할 수있는 모든 가능한 항목이 포함 GameItemList라는 큰 클래스를 항목의 특히 가족의 각 항목을 작성,하지만이 방법의 정의를 포함입니다 . 아마 어떤 점에서

class GameItemList implements Serializable { 
LinkedList<GameItem>gameItemList; 
//methods here like LookUpByName, LookUpByIndex that return references to an item 
} 

- 플레이어가 새로운 게임을 시작하거나 게임 출시로, 같은처럼 :

//create itemList 
FileInputStream fileIn = new FileInputStream("items.dat"); 
ObjectInputStream in = new ObjectInputStream(fileIn); 
GameItemList allItems = (GameItemList)in.readObject(); 
in.close(); 
//Now I have an object called allItems that can be used for lookups. 

감사들, 의견이나 도움을 크게 감상 할 수있다.

+0

아마도 RMI (Remote Method Invocation)에 관심이있을 것입니다. – emory

답변

3

개체를 serialize하면 transient으로 표시되어 있지 않으면 개체의 모든 필드가 serialize됩니다. 그리고이 행동은 물론 재귀 적입니다. 그래서 네, 당신이 개체를 serialize하고 deserialize 할 수 있으며 deserialized 개체 serialize 된 것과 같은 상태로됩니다. 다른 동작으로 직렬화가 쓸모 없게됩니다.

데이터의 장기 저장을 위해 원시 직렬화를 사용하지 않겠습니다. 직렬화 된 객체는 검사하기가 어렵고 텍스트 편집기를 사용하여 수정할 수 없으며 이전 버전의 클래스와의 호환성을 유지하는 것이 어렵습니다. XML 또는 JSON과 같은 더 개방 된 형식을 사용합니다.

1

예, 가능합니다. 객체가 올바르게 직렬화되면, 거기에서 실행되는 응용 프로그램이 직렬화 될 클래스의 정의를 알고있는 한 다른 객체에서 직렬화 할 수 있습니다.

1

이 작업은 가능하지만 Java 직렬화는 클래스를 "발전"시키는 데 악명이 높습니다. 내부 표현은 명시 적으로 디스크상의 형식으로 묶여 있습니다. 독자적인 독자/작성기 메소드로이 문제를 해결할 수 있지만 객체 직렬화 대신 JSON 또는 XML과 같은 이식 가능한 형식을 고려할 수 있습니다.

+0

내부 표현은 디스크상의 형식과 관련이 없습니다. 디스크상의 형식은 자체적으로 별도의 명세를 가지고 있는데, 일반적으로 유형 태그의 객체와 직렬화 가능한 구성원의 이름 - 값 쌍으로 구성됩니다. – EJP

+0

사용자 정의 리더/라이터를 작성하지 않는 한 모든 비공개 필드를 직렬화합니다. 그것이 내부 표현이 정확히 무엇입니까? –

+0

비 정적 인 비 transient 필드를 별도의 사양에 정의 된 형식으로 직렬화합니다. 사전 직렬화 된 객체와의 호환성을 손상시키지 않고 필드를 삽입하거나 삭제하거나 순서를 변경할 수 있습니다. '내부 표현에 명시 적으로 연결됨'으로 설명 할 수는 없습니다. NB 개인은 그것과 아무 상관이 없습니다. – EJP

관련 문제