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 ミリ秒でした。