结合jackson objectmapper和流解析

时间:2013-03-28 17:59:22

标签: android performance

我有一个Android应用程序,解析json块需要大约250ms。它包含一个数组,我只需要立即获得前6-7个值。我真的需要加快获取这些数据。

我的数据结构基本上如下:

class Data {
    List<Map> data = objectmapper_readvalue_data;

    public HashMap getItem(int i) {
        return data.get(i);
    }
}

我真的希望用JsonParser做这样的事情:     class Data {         List data = new List();         JsonParser p;

    public HashMap getItem(int i) {
        while (data.length < i) {
            data.append(p.parseOneBlockOfData());
        }
        return data.get(i);
    }
}

在第一次渲染时只会解析前5-6个值,其他的我可以稍后处理。但是,我错过了“parseOneBlockOfData”函数。当然我可以使用StringBuilder缓冲解析中的每个值,直到找到下一个整个块,然后使用objectParser或者那个,但我不确定性能会是什么样。

有没有非hackish的方式这样做?

1 个答案:

答案 0 :(得分:4)

任何人都可以使用google这个:

JsonParser parser = objectMapper.getFactory().createJsonParser(inputStream);

// Keep going until we find filters:
String fieldName = null;
JsonToken token = null;
while (!"filters".equals(fieldName)) {
    token = parser.nextToken();
    while (token != JsonToken.START_ARRAY) {
        token = parser.nextToken();
    }
    fieldName = parser.getCurrentName();
}
// We're at the filters node

while (parser.nextToken() == JsonToken.START_OBJECT) {
    Map x = objectMapper.readValue(parser, Map.class);
}