kryo对象序列化入口为Kryo的writeClassAndObject。
Kryo#writeClassAndObject
1public void writeClassAndObject (Output output, Object object) {
2 if (output == null) throw new IllegalArgumentException("output cannot be null.");
3 beginObject(); // @1
4 try {
5 if (object == null) {
6 writeClass(output, null); // @2
7 return;
8 }
9 Registration registration = writeClass(output, object.getClass()); // @3
10 if (references && writeReferenceOrNull(output, object, false)) { // @4
11 registration.getSerializer().setGenerics(this, null);
12 return;
13 }
14 if (TRACE || (DEBUG && depth == 1)) log("Write", object);
15 registration.getSerializer().write(this, output, object); // @5
16 } finally {
17 if (--depth == 0 && autoReset) reset(); // @6
18 }
19}
代码@1:开始序列化, 将dept自增,表示当前深度,因为在序列化一个对象时,该方法有可能会被递归调用,每递归调用增加1,一次调用结束后在finally字句中自减。
代码@2:如果对象为空,则调用writeClass(DefaultSerializers ClassSerializer),序列化为空。
代码@3:如果对象不为空,首先序列化对象所属的Class实例,从这里可以看出,Kryo在序列化时