blob: 8142e57152895f070fbb3a7faa4a103fcce54a4d [file] [log] [blame]
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -07001package org.onlab.onos.store.serializers;
2
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -07003import org.onlab.util.KryoNamespace;
tomf5d85d42014-10-02 05:27:56 -07004import java.nio.ByteBuffer;
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -07005
6/**
Yuta HIGUCHI971addc2014-10-07 23:23:17 -07007 * StoreSerializer implementation using Kryo.
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -07008 */
Yuta HIGUCHI971addc2014-10-07 23:23:17 -07009public class KryoSerializer implements StoreSerializer {
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070010
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070011 protected KryoNamespace serializerPool;
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070012
Yuta HIGUCHI672488d2014-10-07 09:23:43 -070013 public KryoSerializer() {
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070014 setupKryoPool();
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070015 }
16
17 /**
18 * Sets up the common serialzers pool.
19 */
20 protected void setupKryoPool() {
Yuta HIGUCHI8d143d22014-10-19 23:15:09 -070021 serializerPool = KryoNamespace.newBuilder()
22 .register(KryoNamespaces.API)
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070023 .build()
24 .populate(1);
25 }
26
27 @Override
Yuta HIGUCHI53a285d2014-10-06 23:58:01 -070028 public byte[] encode(final Object obj) {
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070029 return serializerPool.serialize(obj);
30 }
31
32 @Override
Yuta HIGUCHI53a285d2014-10-06 23:58:01 -070033 public <T> T decode(final byte[] bytes) {
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070034 if (bytes == null) {
35 return null;
36 }
37 return serializerPool.deserialize(bytes);
38 }
39
Yuta HIGUCHIf6d11702014-09-30 19:18:59 -070040 @Override
Yuta HIGUCHI53a285d2014-10-06 23:58:01 -070041 public void encode(Object obj, ByteBuffer buffer) {
Yuta HIGUCHIf6d11702014-09-30 19:18:59 -070042 serializerPool.serialize(obj, buffer);
43 }
44
45 @Override
Yuta HIGUCHI53a285d2014-10-06 23:58:01 -070046 public <T> T decode(ByteBuffer buffer) {
Yuta HIGUCHIf6d11702014-09-30 19:18:59 -070047 return serializerPool.deserialize(buffer);
48 }
49
Yuta HIGUCHIad4c2182014-09-29 11:16:23 -070050}