gpt4 book ai didi

Java Jackson 大对象序列化优化

转载 作者:太空宇宙 更新时间:2023-11-04 11:57:00 24 4
gpt4 key购买 nike

我正在使用 Jackson 来序列化其中数百个其他对象的大型对象。这伴随着性能问题。

大多数自定义序列化类与“JSONSerializer”类中的“AmountAsStringSerializer”相同,并且全部定义为静态。

我的(T 对象)中有一个对象数组,它增加了处理时间。当里面有40个元素时,持续25秒,超过70个元素时,持续近3分钟,如此下去。

我知道其他序列化第三方 API,但系统非常重,因此我们暂时无法迁移到它们。我需要 jackson 的解决方案。 有人知道如何改进 jackson 序列化过程吗?

在那里你可以看到我的实现:

public class JSONSerializer {

private static ObjectMapper mapper = null;

static {
mapper = new ObjectMapper();
addModule(mapper);
configure(mapper);
}

public static <T> String serializeObject(T object) {
String str= null;

try {
str = writer.writeValueAsString(object);
} catch (JsonProcessingException e) {
throw new RuntimeException(e);
}

return str;
}


private static void addModule(ObjectMapper om) {
SimpleModule module = new SimpleModule("ModuleName", new Version(1, 0, 0, null, "", ""));

module.addSerializer(new AmountAsStringSerializer());
//and nearly one hundred serializer module
//.
//.
}

private static void configure(ObjectMapper om) {
om.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
om.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true);
om.configure(SerializationFeature.WRITE_NULL_MAP_VALUES, false);
}


static class AmountAsStringSerializer extends StdSerializer<Amount> {
protected AmountAsStringSerializer() {
super(Amount.class);
}

@Override
public void serialize(Amount value, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException, JsonGenerationException {

jsonGenerator.writeStartObject();
if (value != null && value.getContent() != null) {
jsonGenerator.writeStringField("content", value.getContent().toString());
}
else {
jsonGenerator.writeNull();
}

jsonGenerator.writeEndObject();

}
}
}

最佳答案

您可以使用专为快速高效而设计的 Kryo 序列化程序库。

这是link到 GitHub 上的官方存储库和 here文档。

关于Java Jackson 大对象序列化优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41286218/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com