ddth-cache-adapter-core/src/main/java/com/github/ddth/cacheadapter/CacheEntry.java
@SuppressWarnings("unchecked")
    @Override
    public CacheEntry fromBytes(byte[] data) throws DeserializationException {
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        Map<String, Object> dataMap = SerializationUtils.fromByteArrayFst(data, Map.class, cl);

        this.key = DPathUtils.getValue(dataMap, "k", String.class);

        Long tAccess = DPathUtils.getValue(dataMap, "tac", Long.class);
        this.lastAccessTimestampMs = tAccess != null ? tAccess.longValue()
                : System.currentTimeMillis();

        Long tCreate = DPathUtils.getValue(dataMap, "tcr", Long.class);
        this.creationTimestampMs = tCreate != null ? tCreate.longValue()
                : System.currentTimeMillis();

        Long eAccess = DPathUtils.getValue(dataMap, "eac", Long.class);
        this.expireAfterAccess = eAccess != null ? eAccess.longValue() : -1;

        Long eWrite = DPathUtils.getValue(dataMap, "ewr", Long.class);
        this.expireAfterWrite = eWrite != null ? eWrite.longValue() : -1;

        String clazzName = DPathUtils.getValue(dataMap, "_c_", String.class);
        if (!StringUtils.isBlank(clazzName)) {
            try {
                byte[] valueData = DPathUtils.getValue(dataMap, "v", byte[].class);
                Class<?> clazz = Class.forName(clazzName, true, cl);
                this.value = SerializationUtils.fromByteArray(valueData, clazz, cl);
            } catch (ClassNotFoundException e) {
                throw new DeserializationException(e);
            }
        }

        return this;
    }
@SuppressWarnings("unchecked")
    @Override
    public CacheEntry fromBytes(byte[] data) throws DeserializationException {
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        Map<String, Object> dataMap = SerializationUtils.fromByteArrayFst(data, Map.class, cl);

        this.key = DPathUtils.getValue(dataMap, "k", String.class);

        Long tAccess = DPathUtils.getValue(dataMap, "tac", Long.class);
        this.lastAccessTimestampMs = tAccess != null ? tAccess.longValue()
                : System.currentTimeMillis();

        Long tCreate = DPathUtils.getValue(dataMap, "tcr", Long.class);
        this.creationTimestampMs = tCreate != null ? tCreate.longValue()
                : System.currentTimeMillis();

        Long eAccess = DPathUtils.getValue(dataMap, "eac", Long.class);
        this.expireAfterAccess = eAccess != null ? eAccess.longValue() : -1;

        Long eWrite = DPathUtils.getValue(dataMap, "ewr", Long.class);
        this.expireAfterWrite = eWrite != null ? eWrite.longValue() : -1;

        String clazzName = DPathUtils.getValue(dataMap, "_c_", String.class);
        if (!StringUtils.isBlank(clazzName)) {
            try {
                byte[] valueData = DPathUtils.getValue(dataMap, "v", byte[].class);
                Class<?> clazz = Class.forName(clazzName, true, cl);
                this.value = SerializationUtils.fromByteArray(valueData, clazz, cl);
            } catch (ClassNotFoundException e) {
                throw new DeserializationException(e);
            }
        }

        return this;
    }
{@inheritDoc}

@since 0.5.0