4

Java Serialization、Kryo、Jackson をチェックしています。

ランダムなオブジェクトを N 回シリアル化する小さなコードをいくつか作成しました。シリアライズとデシリアライズにかかる時間と、オブジェクトのサイズを測定します。

私はKryoとJacksonのサイズにあまり満足していません。ベンチマークについて読んでいて、人々はKryoとJacksonの間に多くの違いを得ましたが、Kryoでは約5〜10%少なくなりました. コードで何かを見逃したかどうかはわかりません。

これはKryoへの私のコードです:

public static byte[] writeAsBytes(final Object oObject) {

        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        Output output = new Output(bos);
        kryo2.register(Event.class, 0);
        kryo2.writeClassAndObject(output, oObject);
        output.close();
        return bos.toByteArray();
    }


    public static <T> T read(final byte[] aObject, final Class<T> clazz) {
        T oObject;
        ByteArrayInputStream is = new ByteArrayInputStream(aObject);
        Input input = new Input(is);
        kryo2.register(clazz, 0);
        oObject = (T) kryo2.readClassAndObject(input);
        input.close();

        return oObject;
    }

オブジェクトを登録しようとしましたが、登録せずに同じサイズになり、時間も同様でした。

Kryoでサイズを改善するにはどうすればよいですか?? 私が得たサイズと時間:

Size java:5245
Size jackson:5076
Size kryo:4790
14/09/22 12:18:05 INFO util.TimerUtil: DesSerializar Jackson:25135ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: DesSerializar Java:2637ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: DesSerializar Kryo:396ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: Serializar Jackson:985ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: Serializar Java:1171ms,Counter:10001
14/09/22 12:18:05 INFO util.TimerUtil: Serializar Kryo:397ms,Counter:10001

私は何度もコードを実行しましたが、Jackson のデシリアライズ時間は 25000 ミリ秒でした。

4

1 に答える 1

2

Java でオブジェクトをより効果的にシリアル化するkryo.readObject(arg0, arg1)代わりに使用してみてください。kryo.readClassAndObject(input);

于 2015-08-18T16:08:43.633 に答える