0

JSON文字列をPOJOとの間で変換することをいじっていました。そして、さまざまなタイプのjsonに対して新しいクラス定義を作成するのが最善かどうか疑問に思いました. nullフィールドを解析しなければならないgoogle gsonを持っていると速度が落ちると思った.

public class CustomJSON {
    private String name;

    public String getName() { return name; }
    public void setName(String name) { this.name = name; }
}

しかし、私はクライアントから他のものを受け取ることができました. 好きな色、食べ物etc.

public class CommonJSON {
    private String name;
    private String food;
    private String music;

    //getters and setters.
}

だから私はテストを実行しました。

CustomJson は上記と同じで、CommonJSON を使用して、使用されない他の 50 個の null フィールドを ax に追加しました。

public class CommonJSON {
    private String name;
    private String a;
          ...
    private String ax;

    //getters and setters.
}

テストを実行するための私の主な方法は次のとおりです。

public static void main(String[] args) {
        // TODO Auto-generated method stub


        String theJSON = "";

        int passes = 100;
        long start;
        long finish;
        long exeTime;

        Gson gson = new Gson();

        //custom JSON
        start = System.nanoTime();
        for(int i=0;i<passes;i++)
        {
            CustomJSON custom = new CustomJSON();
            custom.setName("StackOverFlow");            
            theJSON = gson.toJson(custom);
        }
        finish = System.nanoTime();
        System.out.println(theJSON);
        exeTime = finish-start;
        System.out.println("Custom JSON \n\t>\t "+(exeTime)+" Nano seconds");
        System.out.println(" \t>\t "+Math.round((exeTime)/1000000.0)+" Micro seconds\n");

    //common JSON
    start= System.nanoTime();
    for(int i=0;i<passes;i++)
    {
        CommonJSON toClientJSONd = new CommonJSON();
        toClientJSONd.setName("StackOverFlow");
        theJSON = gson.toJson(toClientJSONd);
    }
    finish = System.nanoTime();
    System.out.println(theJSON);
    exeTime = finish-start;
    System.out.println("Common JSON \n\t>\t "+(exeTime)+" Nano seconds");
    System.out.println(" \t>\t "+Math.round((exeTime)/1000000.0)+" Micro seconds");

}

結果は私が期待したものではありません。100 パスで、共通クラスは私のマシンで 10 ミリ秒速く終了します。パスの数を増やすと、一般的なクラスは最終的に遅れを取り始めます。

共通クラスを開始するのが速い理由は何ですか? コードでこれについて心配する必要がありますか、それともすべてのjsonの共通クラスに1つのクラスを使用するだけですか?

誰かが実行したい場合は、完全なソースと Eclipse プロジェクトを提供できます。

4

2 に答える 2

2

JVM のウォームアップの影響を経験しているようです。詳細については、このSO 投稿を参照してください。

于 2013-01-18T00:53:01.167 に答える
0

私の質問の他の部分に答えるために。単純な JSON オブジェクトの場合、GSON lib の JsonObject を使用してプロパティを追加する方が適切です。

JsonObject json = new JsonObject();
json.addProperty("myBool", false);
于 2013-03-20T16:50:51.803 に答える