문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
java:kryo [2014/05/19 15:06] kwon37xi |
java:kryo [2015/06/22 17:08] kwon37xi [기본 생성자(No args constructor)가 없을 경우] |
||
---|---|---|---|
줄 6: | 줄 6: | ||
* [[https:// | * [[https:// | ||
* [[https:// | * [[https:// | ||
+ | |||
+ | ===== 의존성 ===== | ||
+ | * 의존성 설정시 '' | ||
===== 기본 직렬화/ | ===== 기본 직렬화/ | ||
줄 15: | 줄 18: | ||
Kryo kryo = new Kryo(); | Kryo kryo = new Kryo(); | ||
+ | // maxBufferSize = -1 이면 무제한(actually Integer.MAX_VALUE) | ||
Output output = new Output(bufferSize, | Output output = new Output(bufferSize, | ||
kryo.writeClassAndObject(output, | kryo.writeClassAndObject(output, | ||
줄 53: | 줄 57: | ||
// AbstractPersistentCollection is org.hibernate.collection.AbstractPersistentCollection. | // AbstractPersistentCollection is org.hibernate.collection.AbstractPersistentCollection. | ||
+ | // 혹시 kryo.addDefaultSerializer() 사용할 수 있는지, 없다면 왜 안되는지 확인 필요. | ||
+ | </ | ||
+ | |||
+ | ===== Kryo Object Pool ===== | ||
+ | Kryo 3.x 부터 Kryo Object Pool 기능이 생겨서 성능 향상에 도움이 될 수 있음. | ||
+ | |||
+ | <code java> | ||
+ | import com.esotericsoftware.kryo.Kryo; | ||
+ | import com.esotericsoftware.kryo.pool.*; | ||
+ | |||
+ | KryoFactory factory = new KryoFactory() { | ||
+ | public Kryo create () { | ||
+ | Kryo kryo = new Kryo(); | ||
+ | // configure kryo instance, customize settings | ||
+ | return kryo; | ||
+ | } | ||
+ | }; | ||
+ | // Build pool with SoftReferences enabled (optional) | ||
+ | KryoPool pool = new KryoPool.Builder(factory).softReferences().build(); | ||
+ | Kryo kryo = pool.borrow(); | ||
+ | // do s.th. with kryo here, and afterwards release it | ||
+ | pool.release(kryo); | ||
+ | |||
+ | // or use a callback to work with kryo - no need to borrow/ | ||
+ | // that's done by `run`. | ||
+ | String value = pool.run(new KryoCallback() { | ||
+ | public String execute(Kryo kryo) { | ||
+ | return kryo.readObject(input, | ||
+ | } | ||
+ | }); | ||
+ | </ | ||
+ | |||
+ | ===== 기본 생성자(No args constructor)가 없을 경우 ===== | ||
+ | * 기본 생성자가 존재하지 않을 경우에는 객체를 생성하지 못해서 오류가 발생한다. 단, private 으로라도 존재하면 괜찮다. | ||
+ | * 순수 Kryo만 사용할 때는 objenesis의 '' | ||
+ | Kryo kryo = new Kryo(); | ||
+ | kryo.setInstantiatorStrategy(new Kryo.DefaultInstantiatorStrategy(new StdInstantiatorStrategy())); | ||
+ | </ | ||
+ | * '' | ||
+ | * 안 될 경우 '' | ||
+ | * '' | ||
+ | Kryo kryo = new KryoReflectionFactorySupport(); | ||
</ | </ | ||