// Copyright (C) 2011 - Will Glozer. All rights reserved. package com.lambdaworks.redis; import com.lambdaworks.redis.codec.RedisCodec; import org.junit.Test; import java.io.*; import java.nio.ByteBuffer; import java.nio.charset.Charset; import java.util.List; import static org.junit.Assert.assertEquals; public class CustomCodecTest extends AbstractCommandTest { @Test public void test() throws Exception { RedisConnection<String, Object> connection = client.connect(new SerializedObjectCodec()); List<String> list = list("one", "two"); connection.set(key, list); assertEquals(list, connection.get(key)); } public class SerializedObjectCodec extends RedisCodec<String, Object> { private Charset charset = Charset.forName("UTF-8"); @Override public String decodeKey(ByteBuffer bytes) { return charset.decode(bytes).toString(); } @Override public Object decodeValue(ByteBuffer bytes) { try { byte[] array = new byte[bytes.remaining()]; bytes.get(array); ObjectInputStream is = new ObjectInputStream(new ByteArrayInputStream(array)); return is.readObject(); } catch (Exception e) { return null; } } @Override public byte[] encodeKey(String key) { return charset.encode(key).array(); } @Override public byte[] encodeValue(Object value) { try { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(bytes); os.writeObject(value); return bytes.toByteArray(); } catch (IOException e) { return null; } } } }