문서의 선택한 두 판 사이의 차이를 보여줍니다.
양쪽 이전 판 이전 판 다음 판 | 이전 판 다음 판 양쪽 다음 판 | ||
java:kryo [2014/05/19 15:07] kwon37xi |
java:kryo [2015/08/31 13:16] kwon37xi |
||
---|---|---|---|
줄 1: | 줄 1: | ||
====== Kryo - Java 직렬화(Serialization) ====== | ====== Kryo - Java 직렬화(Serialization) ====== | ||
- | * http://code.google.com/p/kryo/ | + | * https://github.com/EsotericSoftware/kryo |
* Java 객체 직렬화 솔루션. | * Java 객체 직렬화 솔루션. | ||
* Java Serialization의 단점인 서로 다른 버전의 직렬화를 더 잘 지원하는듯. | * Java Serialization의 단점인 서로 다른 버전의 직렬화를 더 잘 지원하는듯. | ||
줄 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, | ||
줄 55: | 줄 59: | ||
// 혹시 kryo.addDefaultSerializer() 사용할 수 있는지, 없다면 왜 안되는지 확인 필요. | // 혹시 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(); | ||
+ | </ | ||
+ | |||
+ | ===== Enum ===== | ||
+ | Kryo 기본적으로 Enum을 ordinal로 직렬화한다. 이 경우 Enum의 순서가 변경되면 문제가 발생한다. | ||
+ | '' | ||
+ | |||