. 나는 Kryo v2를 사용할 것을 제안한다.
Map에 대한 serializer를 설정 한 것처럼 각 키와 값을 직렬화 할 수 있습니다. 각 객체를 직렬화하려면 Output 클래스를 사용하여 데이터를 쓰고 Input 클래스를 사용하여 읽거나 Kryo 인스턴스에서 메소드를 호출하여 객체를 처리하게합니다.
내장 된 MapSerializer를 사용하는 것이 더 쉬울 것입니다. Tile 객체의 직렬화 만 사용자 정의하면됩니다. KryoSerializable을 확장 할 수도 있고 Serializer를 등록 할 수도 있습니다. 여기서 일례는 ... 여기
public class Tile implements KryoSerializable {
int x, y;
Object something;
public void write (Kryo kryo, Output output) {
output.writeInt(x);
output.writeInt(y);
kryo.writeClassAndObject(output, something);
}
public void read (Kryo kryo, Input input) {
x = input.readInt();
y = input.readInt();
something = kryo.readClassAndObject(input);
}
}
다른 예 대신 KryoSerializable의 시리얼을 사용한다 :
public class Tile {
int x, y;
Object something;
}
kryo.register(Tile.class, new Serializer<Tile>() {
public void write (Kryo kryo, Output output, Tile object) {
output.writeInt(object.x);
output.writeInt(object.y);
kryo.writeClassAndObject(output, object);
}
public Tile read (Kryo kryo, Input input, Class<Tile> type) {
Tile tile = new Tile();
kryo.reference(tile); // Only necessary if Kryo#setReferences is true AND Tile#something could reference this tile.
tile.x = input.readInt();
tile.y = input.readInt();
tile.something = kryo.readClassAndObject(input);
return tile;
}
});
이는 Kryo # 1 참조 호출의 판독 방법에서 약간 더 복잡 Kryo 인스턴스를 사용하여 자식 객체를 deserialize하기 전에. 이것은 참조를 전혀 사용하지 않거나 방금 작성한 타일을 "무언가"객체가 참조 할 수 없다는 것을 알고 있다면 생략 할 수 있습니다. 입력을 사용하여 데이터를 읽는 경우 Kryo # 참조를 호출 할 필요가 없습니다.