문서의 선택한 두 판 사이의 차이를 보여줍니다.
| 양쪽 이전 판 이전 판 다음 판 | 이전 판 | ||
|
java:kryo [2015/06/22 14:57] kwon37xi [Kryo - Java 직렬화(Serialization)] |
java:kryo [2016/01/08 20:20] (현재) kwon37xi [기본 생성자(No args constructor)가 없을 경우] |
||
|---|---|---|---|
| 줄 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의 단점인 서로 다른 버전의 직렬화를 더 잘 지원하는듯. | ||
| 줄 18: | 줄 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, | ||
| 줄 60: | 줄 61: | ||
| ===== Kryo Object Pool ===== | ===== Kryo Object Pool ===== | ||
| - | * Kryo 3.x 부터 Kryo Object Pool 기능이 생겨서 성능 향상에 도움이 될 수 있음.< | + | Kryo 3.x 부터 Kryo Object Pool 기능이 생겨서 성능 향상에 도움이 될 수 있음. |
| + | |||
| + | <code java> | ||
| import com.esotericsoftware.kryo.Kryo; | import com.esotericsoftware.kryo.Kryo; | ||
| import com.esotericsoftware.kryo.pool.*; | import com.esotericsoftware.kryo.pool.*; | ||
| 줄 86: | 줄 89: | ||
| </ | </ | ||
| + | ===== 기본 생성자(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의 순서가 변경되면 문제가 발생한다. | ||
| + | '' | ||
| + | <code java> | ||
| + | kryo.addDefaultSerializer(Enum.class, | ||
| + | </ | ||