View Javadoc
1   package xuml.tools.model.compiler.runtime;
2   
3   import java.io.ByteArrayInputStream;
4   import java.io.ByteArrayOutputStream;
5   
6   import org.objenesis.strategy.StdInstantiatorStrategy;
7   
8   import com.esotericsoftware.kryo.Kryo;
9   import com.esotericsoftware.kryo.io.Input;
10  import com.esotericsoftware.kryo.io.Output;
11  import com.esotericsoftware.kryo.util.DefaultInstantiatorStrategy;
12  import com.esotericsoftware.kryo.util.Pool;
13  
14  public class Util {
15  
16      private static final Pool<Kryo> pool = createKryoPool();
17  
18      public static byte[] toBytes(Object object) {
19          if (object == null)
20              return new byte[] {};
21          Kryo kryo = pool.obtain();
22          try {
23              ByteArrayOutputStream bytes = new ByteArrayOutputStream();
24              Output output = new Output(bytes);
25              try {
26                  kryo.writeObject(output, object);
27              } finally {
28                  output.close();
29              }
30              return bytes.toByteArray();
31          } finally {
32              pool.free(kryo);
33          }
34      }
35  
36      public static <T> T toObject(byte[] bytes, Class<T> cls) {
37          if (bytes.length == 0)
38              return null;
39          ByteArrayInputStream in = new ByteArrayInputStream(bytes);
40          Kryo kryo = pool.obtain();
41          try {
42              Input input = new Input(in);
43              try {
44                  return kryo.readObject(input, cls);
45              } finally {
46                  input.close();
47              }
48          } finally {
49              pool.free(kryo);
50          }
51      }
52  
53      private static Pool<Kryo> createKryoPool() {
54          return  new Pool<Kryo>(true, true, 8) {
55              @Override
56              public Kryo create() {
57                  Kryo kryo = new Kryo();
58                  kryo.setRegistrationRequired(false);
59                  kryo.setInstantiatorStrategy(
60                          new DefaultInstantiatorStrategy(new StdInstantiatorStrategy()));
61                  // configure kryo instance, customize settings
62                  return kryo;
63              }
64          };
65      }
66  
67  }