使用Jackson Object Mapper将Map转换为Java对象非常慢

时间:2017-03-02 14:52:05

标签: java android json jackson objectmapper

我目前正在尝试使用Jackson数据绑定库从Map创建52个Java对象,目前转换所有52个对象总共需要3.518秒,这似乎非常慢。我不确定为什么会这样。这是一个异常还是可以做些什么来使这些转换更快?

这是我的Java对象类:

public class MoodDatapoint extends DocumentModelHelper {

    @JsonProperty(value = "happiness")
    private int happiness;

    @JsonProperty(value = "stress")
    private int stress;

    @JsonProperty(value = "pain")
    private int pain;

    @JsonProperty(value = "timestamp")
    private long timestamp;

    @JsonProperty(value = "lat")
    private double lat;

    @JsonProperty(value = "lng")
    private double lng;

    @JsonProperty(value = "comment")
    private String comment;

    @JsonProperty(value = "event_name")
    private String eventName;

    @JsonProperty(value = "is_before")
    private boolean isBefore;

    @JsonProperty(value = "related_event_id")
    private String relatedEventID;
}

这是我想要转换成类的地图:

    {
    stress=0, 

    pain=0, 

    happiness=10, 

    timestamp=1488464269384, 

    is_before=false, 

    lng=-79.6208645, 

    event_name=null, 

    comment=, 

    lat=43.6462939,

    related_event_id=null
}

我的代码将Map转换为对象:

ObjectMapper m = new ObjectMapper();

MoodDatapoint datapoint = m.convertValue(map, MoodDatapoint.class);

使用logcat计算每个对象转换的持续时间,似乎每次转换平均需要62毫秒:

...
D/M DATAPOINT CONVERSION DURATION: 68
D/M DATAPOINT CONVERSION DURATION: 45
D/TOTAL DURATION (S): 3550
D/AVG DURATION: 68
D/Total objects: 

1 个答案:

答案 0 :(得分:1)

不要为每次转换创建ObjectMapper,而是创建一个实例并将其用于所有转换。 ObjectMapper创建是一项非常昂贵的操作。