2

json ブロックの解析に約 250 ミリ秒かかる Android アプリケーションがあります。これには配列が含まれており、すぐに利用できる最初の 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 またはそれを使用できますが、パフォーマンスがどのようになるかはわかりません。

これを行う非ハックな方法はありますか?

4

1 に答える 1

4

誰かがこれをグーグルで調べた場合:

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);
}
于 2013-03-29T11:30:47.653 に答える