I want to serialize a graph object and I can't serialize the custom Node class like this. Could you guys help me out? Any suggestions?
public class Node {
public int id;
public Node entryNode;
public Node escapeNode;
public Node skipNode;
public HashMap<Character, List<Node>> charTrigger;
public HashMap<Integer, List<Node>> referenceTrigger;
public boolean isEnd = false;
public Node() {}
}
I tried two ways to serilize this class but both failed.
public class NodeSerializer extends Serializer<Node> {
@Override
public void write(Kryo kryo, Output output, Node node) {
output.writeInt(node.id);
kryo.writeClassAndObject(output, node.entryNode);
kryo.writeClassAndObject(output, node.escapeNode);
kryo.writeClassAndObject(output, node.skipNode);
kryo.writeClassAndObject(output, node.charTrigger);
kryo.writeClassAndObject(output, node.referenceTrigger);
output.writeBoolean(node.isEnd);
}
@Override
public Node read(Kryo kryo, Input input, Class<? extends Node> type) {
int id = input.readInt();
Node node = new Node(id);
node.entryNode = kryo.readObject(input, Node.class);
node.escapeNode = kryo.readObject(input, Node.class);
node.skipNode = kryo.readObject(input, Node.class);
node.charTrigger = kryo.readObject(input, HashMap.class);
node.referenceTrigger = kryo.readObject(input, HashMap.class);
node.isEnd = input.readBoolean();
return node;
}
}
public class NodeSer<T> extends Serializer<T> {
private final Map<Character, T> charMap = new HashMap<>();
private final Map<Integer, T> intMap = new HashMap<>();
private final Serializer serializer;
public NodeSer(Serializer serializer) {
this.serializer = serializer;
}
@Override
public void write(Kryo kryo, Output output, Object object) {
serializer.write(kryo, output, object);
}
@Override
public T read(Kryo kryo, Input input, Class type) {
T object = (T) serializer.read(kryo, input, type);
int code = Arrays.hashCode(input.getBuffer());
if (charMap.containsKey((char) code)) {
return charMap.get((char) code);
} else {
charMap.put((char) code, object);
return object;
}
code = Arrays.hashCode(input.getBuffer());
if (intMap.containsKey(code)) {
return intMap.get(code);
} else {
intMap.put(code, object);
}
return object;
}
}
Actually I just want to serialize a graph, but how to serialize the nodes really drives my crazy. Is there any chance that you can help me out? So many thanks!