我正在使用分布式 MAP 作为条目来实现 Hazelcast 应用程序。我的 JsonNodeSerializer 如下所示
private final ObjectReader jsonNodeReader;
private final ObjectWriter jsonNodeWriter;
@Override
public void write(ObjectDataOutput out, JsonNode jsonNode)
throws IOException {
out.write(jsonNodeWriter.writeValueAsBytes(jsonNode));
}
@Override
public JsonNode read(ObjectDataInput in)
throws IOException {
return jsonNodeReader.readTree(in);
}
但是,我想使用 Kryo 来避免使用 JsonNodeReader/Writer 以节省一些空间并提高性能。
我尝试使用 Kryo,但我无法读取 JsonNode/ObjectNode,因为我们没有无参数构造函数。
@Override
public void write(ObjectDataOutput out, JsonNode jsonNode)
throws IOException {
Kryo kryo = KRYO_THREAD_LOCAL.get();
Output output = new Output((OutputStream) out);
kryo.writeObject(output, jsonNode);
output.flush();
//out.write(jsonNodeWriter.writeValueAsBytes(jsonNode));
}
@Trace(dispatcher = true)
@Override
public JsonNode read(ObjectDataInput in)
throws IOException {
InputStream inputStream = (InputStream) in;
Input input = new Input(inputStream);
Kryo kryo = KRYO_THREAD_LOCAL.get();
return kryo.readObject(input, ObjectNode.class);
// return jsonNodeReader.readTree(in);
}
不确定我使用 JsonNodeReader/Writer 的方法是否最佳,或者使用 Kryo 会使我的解决方案更好。
我的目标是节省空间和提高性能。欢迎任何建议让我朝着正确的方向前进。谢谢