All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.hibernate.cache.redis.serializer.FstRedisSerializer Maven / Gradle / Ivy

package org.hibernate.cache.redis.serializer;

import org.nustaq.serialization.FSTConfiguration;
import org.nustaq.serialization.FSTObjectInput;
import org.nustaq.serialization.FSTObjectOutput;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;

/**
 * Serializer using Fast-Serialization
 *
 * @author Sunghyouk Bae
 */
public class FstRedisSerializer implements RedisSerializer {

    private static final FSTConfiguration conf = FSTConfiguration.createDefaultConfiguration();
    private static final Logger log = LoggerFactory.getLogger(FstRedisSerializer.class);

    /**
     * Provides access to serialization configuration, to inject custom ClassLoaders
     * among other things.
     * @return serialization configuration.
     */
    public static FSTConfiguration getConf() {
	return conf;
    }

    @Override
    public byte[] serialize(final T graph) {
        if (graph == null)
            return EMPTY_BYTES;

        try (ByteArrayOutputStream os = new ByteArrayOutputStream()){
            FSTObjectOutput oos = conf.getObjectOutput(os);
            oos.writeObject(graph);
            oos.flush();

            return os.toByteArray();
        } catch (Exception e) {
            log.warn("Fail to serializer graph. graph=" + graph, e);
            return EMPTY_BYTES;
        }
    }

    @Override
    @SuppressWarnings("unchecked")
    public T deserialize(final byte[] bytes) {
        if (SerializationTool.isEmpty(bytes))
            return null;

        try (ByteArrayInputStream is = new ByteArrayInputStream(bytes)){
            FSTObjectInput ois = conf.getObjectInput(is);
            return (T) ois.readObject();
        } catch (Exception e) {
            log.warn("Fail to deserialize bytes.", e);
            return null;
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy