문서의 이전 판입니다!
public static final int BASE_FLAG = 0; @Override public CachedObject encode(Object o) { Kryo kryo = new Kryo(); Output output = new Output(bufferSize, maxBufferSize); kryo.writeClassAndObject(output, o); byte[] bytes = output.toBytes(); return new CachedObjectImpl(BASE_FLAG, bytes); } @Override public Object decode(CachedObject data) { Kryo kryo = new Kryo(); return kryo.readClassAndObject(new Input(data.getData())); }
encode
시에 maxBufferSize
를 너무 작게 잡으면 대용랴 데이터를 인코딩할 수 없을 수 있다. 원하는 최대 데이터 크기에 맞게 잡아줘야한다.CompatibleFieldSerializer
를 사용하면 오류는 발생하지 않는다.Kryo kryo = new Kryo(); kryo.setDefaultSerializer(CompatibleFieldSerializer.class);
org.hibernate.LazyInitializationException when de-serializing
kryoSerializer = new Kryo() { @Override public Serializer<?> getDefaultSerializer( final Class type ) { if (AbstractPersistentCollection.class.isAssignableFrom( type )) { return new FieldSerializer( kryoSerializer, type ); } return super.getDefaultSerializer( type ); } } // AbstractPersistentCollection is org.hibernate.collection.AbstractPersistentCollection. // 혹은 Kryo kryoSerializer = new Kryo(); kryo.register(AbstractPersistentCollection.class, new FieldSerializer(kryo, AbstractPersistentCollection.class));