Kryo serialization of graph object

14 views
Skip to first unread message

Shengzhe Hu

unread,
Mar 24, 2024, 9:44:23 PM3/24/24
to kryo-users
Hi all,

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!

Reply all
Reply to author
Forward
0 new messages