【发布时间】:2025-12-16 18:45:01
【问题描述】:
如果我想在我的应用程序的两个实例之间传输 Jackson TokenBuffer,有没有一种有效的方法来序列化它?
特别是,我不关心使用的确切二进制格式,但我关心不重复保存密钥字符串。考虑,例如下面的例子:
List msg = new ArrayList();
for (int i = 0; i < 100; i++) {
msg.add(new HashMap() {{
put("asdfasdfasdf", i);
}});
// Doesn't necessarily have to be maps, could also be instances of some class
}
ObjectMapper om = new ObjectMapper();
TokenBuffer tb = new TokenBuffer()
om.writeValue(tb, msg);
现在,如果我只是使用一些典型的 JsonGenerator 来序列化给定的tb,
JsonParser p = tb.asParse();
p.nextToken();
OutputStream bos = new ByteArrayOutputStream();
try (JsonGenerator generator = (new CBORFactory()).createGenerator(bos)) {
generator.copyCurrentStructure(p);
}
字符串asdfasdfasdf 将在bos 中包含100 次。我能以某种方式避免这种情况吗? IE。对于某些支持重复映射键消除的二进制格式,是否有 JsonGenerator 的实例?
为了比较,如果我完成了(new Kryo()).writeClassAndObject(new Output(bos), msg),则字符串asdfasdfasdf 只会在二进制输出中包含一次。但是我已经有了tb,并且没有简单的方法可以返回msg,所以我想知道如何以一种时间和大小有效的方式序列化和传输tb。
【问题讨论】:
标签: java serialization jackson