package com.alibaba.doris.dataserver.store.serialize; import java.nio.ByteBuffer; import com.alibaba.doris.common.data.ByteWrapper; import com.alibaba.doris.common.data.Key; import com.alibaba.doris.common.data.Value; /** * @author ajun Email:jack.yuj@alibaba-inc.com */ public class KeyValueSerializerFactory { @SuppressWarnings("unchecked") private KeyValueSerializerFactory() { keySerializerArray = new Serializer[1]; Serializer<Key> serializer = new KeySerializer(); keySerializerArray[serializer.getVersion()] = serializer; valueSerializerArray = new Serializer[1]; Serializer<Value> valueSerializer = new ValueSerializer(); valueSerializerArray[valueSerializer.getVersion()] = valueSerializer; } public static KeyValueSerializerFactory getInstance() { return instance; } public Serializer<Key> getKeySerializer(byte version) { return keySerializerArray[version]; } public Serializer<Value> getValueSerializer(byte version) { return valueSerializerArray[version]; } public Serializer<Key> getDefaultKeySerializer() { return keySerializerArray[DEFAULT_KEY_SERIALIZER_VERSION]; } public Serializer<Value> getDefaultValueSerializer() { return valueSerializerArray[DEFAULT_VALUE_SERIALIZER_VERSION]; } public Key decodeKey(byte[] keyBytes) { return decodeKey(ByteBuffer.wrap(keyBytes)); } public Key decodeKey(ByteBuffer buffer) { byte serializerVersion = buffer.get(); Serializer<Key> keySerializer = instance.getKeySerializer(serializerVersion); return keySerializer.decode(buffer); } public Value decodeValue(byte[] valueBytes) { return decodeValue(ByteBuffer.wrap(valueBytes)); } public Value decodeValue(ByteBuffer buffer) { if (buffer.hasRemaining()) { byte serializerVersion = buffer.get(); Serializer<Value> valueSerializer = instance.getValueSerializer(serializerVersion); return valueSerializer.decode(buffer); } else { return null; } } public ByteWrapper encode(Key key) { Serializer<Key> keySerializer = instance.getDefaultKeySerializer(); return keySerializer.encode(key); } public boolean encode(ByteBuffer buffer, Key key) { Serializer<Key> keySerializer = instance.getDefaultKeySerializer(); return keySerializer.encode(buffer, key); } public ByteWrapper encode(Value value) { Serializer<Value> valueSerializer = instance.getDefaultValueSerializer(); return valueSerializer.encode(value); } public boolean encode(ByteBuffer buffer, Value value) { Serializer<Value> valueSerializer = instance.getDefaultValueSerializer(); return valueSerializer.encode(buffer, value); } private final Serializer<Key>[] keySerializerArray; private final Serializer<Value>[] valueSerializerArray; private static final byte DEFAULT_KEY_SERIALIZER_VERSION = 0; private static final byte DEFAULT_VALUE_SERIALIZER_VERSION = 0; private static final KeyValueSerializerFactory instance = new KeyValueSerializerFactory(); }