javajackson大对象序列化优化

javajackson大对象序列化优化,java,json,serialization,jackson,Java,Json,Serialization,Jackson,我正在使用Jackson序列化大型对象,其中包括数百个其他对象。这会带来性能问题 大多数自定义序列化类与“JSONSerializer”类中的“AmountAsStringSerializer”相同,并且都是定义的静态类 my(T对象)中有一个对象数组,它增加了处理时间。当它有40个元素时,持续25秒,超过70个元素,持续近3分钟,继续这样 我知道其他序列化第三方API,但系统非常繁重,因此我们现在无法迁移到它们。我需要杰克逊的解决方案有人知道如何改进此序列化过程吗? 在这里,您可以看到我的实现

我正在使用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序列化的解决方案,那没关系,但不是这个。哦…对不起!我没有从你的问题中理解这一点。在那种情况下,我没有解决办法。