javajackson大对象序列化优化
我正在使用Jackson序列化大型对象,其中包括数百个其他对象。这会带来性能问题 大多数自定义序列化类与“JSONSerializer”类中的“AmountAsStringSerializer”相同,并且都是定义的静态类 my(T对象)中有一个对象数组,它增加了处理时间。当它有40个元素时,持续25秒,超过70个元素,持续近3分钟,继续这样 我知道其他序列化第三方API,但系统非常繁重,因此我们现在无法迁移到它们。我需要杰克逊的解决方案有人知道如何改进此序列化过程吗? 在这里,您可以看到我的实现:javajackson大对象序列化优化,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我正在使用Jackson序列化大型对象,其中包括数百个其他对象。这会带来性能问题 大多数自定义序列化类与“JSONSerializer”类中的“AmountAsStringSerializer”相同,并且都是定义的静态类 my(T对象)中有一个对象数组,它增加了处理时间。当它有40个元素时,持续25秒,超过70个元素,持续近3分钟,继续这样 我知道其他序列化第三方API,但系统非常繁重,因此我们现在无法迁移到它们。我需要杰克逊的解决方案有人知道如何改进此序列化过程吗? 在这里,您可以看到我的实现
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();
}
}
}
公共类JSONSerializer{
私有静态对象映射器映射器=null;
静止的{
映射器=新的ObjectMapper();
addModule(mapper);
配置(映射器);
}
公共静态字符串序列化对象(T对象){
字符串str=null;
试一试{
str=writer.writeValueAsString(对象);
}捕获(JsonProcessingException e){
抛出新的运行时异常(e);
}
返回str;
}
私有静态void addModule(ObjectMapper om){
SimpleModule=new SimpleModule(“ModuleName”,新版本(1,0,0,null,“,”);
addSerializer(新的AmountAsStringSerializer());
//和近百个序列化模块
//.
//.
}
私有静态void配置(ObjectMapper om){
configure(在未知属性上反序列化feature.FAIL,false);
configure(反序列化功能。接受单个值作为数组,true);
配置(SerializationFeature.WRITE\u NULL\u MAP\u值,false);
}
静态类AmountAsStringSerializer扩展了StdSerializer{
受保护的AmountAsStringSerializer(){
超级(金额、级别);
}
@凌驾
public void serialize(Amount值、JsonGenerator、JsonGenerator、SerializerProvider、SerializerProvider、SerializerProvider)抛出IOException、JsonGenerationException{
jsongGenerator.writeStartObject();
if(value!=null&&value.getContent()!=null){
jsonGenerator.writeStringField(“content”,value.getContent().toString());
}
否则{
jsonggenerator.writeNull();
}
jsongGenerator.writeEndObject();
}
}
}
您可以使用专为快速高效而设计的Kryo序列化程序库
这是GitHub上的官方存储库和文档。您可以使用专门设计为快速高效的Kryo序列化程序库
这是GitHub上的官方存储库和文档。我知道Kryo,但系统非常繁重,因此我们现在无法迁移到Kryo。Kryo不为我工作。如果你有jackson序列化的解决方案,那没关系,但不是这个。哦…对不起!我没有从你的问题中理解这一点。我没有解决这个问题的办法。我知道高雄,但是系统很重,所以我们现在不能迁移到高雄。Kryo不为我工作。如果你有jackson序列化的解决方案,那没关系,但不是这个。哦…对不起!我没有从你的问题中理解这一点。在那种情况下,我没有解决办法。