private static boolean canSerialize(Kryo kryo, ThreadLocal<?> tl, Object val) { if (val == null) return true; if (val instanceof Serializable || kryo.getClassResolver().getRegistration(val.getClass()) != null) return true; if (val instanceof co.paralleluniverse.io.serialization.Serialization) return false; if (!kryo.getDefaultSerializer(val.getClass()).getClass().isAssignableFrom(FieldSerializer.class)) return true; // If we can't serialize the ThreadLocal then we just deserialise it as null. In practice, TLS slots are // almost always filled out on demand with some sort of cached object, so this is often OK. if (PRINT_WARNINGS_ON_UNSERIALIZABLE_THREAD_LOCAL) System.err.println("WARNING: Cannot serialize ThreadLocal (" + tl + " = " + val + "), it will be restored as null."); return false; } }
private static Serializer<?> getSerializer(Kryo kryo, Class<?> type) { Registration registration = kryo.getClassResolver().getRegistration(type); return registration != null ? registration.getSerializer() : null; }
private static Serializer<?> getSerializer(Kryo kryo, Class<?> type) { Registration registration = kryo.getClassResolver().getRegistration(type); return registration != null ? registration.getSerializer() : null; }
private static Serializer<?> getSerializer(Kryo kryo, Class<?> type) { Registration registration = kryo.getClassResolver().getRegistration(type); return registration != null ? registration.getSerializer() : null; }
private static Serializer<?> getSerializer(Kryo kryo, Class<?> type) { Registration registration = kryo.getClassResolver().getRegistration(type); return registration != null ? registration.getSerializer() : null; }
/** * 快速写入 * * @param kryo * @param output * @param defaultRegistration * @param value */ public static void fastWrite(Kryo kryo, Output output, Registration defaultRegistration, Object value) { if (value == null) { kryo.writeClass(output, null); return; } Class<?> type = value.getClass(); if (defaultRegistration.getType().equals(type)) { if (defaultRegistration.getId() == FastClassResolver.NAME) { ((FastClassResolver) kryo.getClassResolver()).writeName(output, type, defaultRegistration); } else { output.writeVarInt(defaultRegistration.getId() + 2, true); } kryo.writeObject(output, value, defaultRegistration.getSerializer()); } else { Registration registration = kryo.writeClass(output, value.getClass()); Serializer<?> serializer = registration.getSerializer(); kryo.writeObject(output, value, serializer); } }