class JavaValueDecoder extends AbstractValueDecoder {

    public static final JavaValueDecoder INSTANCE = new JavaValueDecoder(true);

    public JavaValueDecoder(boolean useIdentityNumber) {
        super(useIdentityNumber);
    }

    @Override
    public Object doApply(byte[] buffer) throws Exception {<FILL_FUNCTION_BODY>}

    protected ObjectInputStream buildObjectInputStream(ByteArrayInputStream in) throws IOException {
        return new ObjectInputStream(in);
    }
}

        ByteArrayInputStream in;
        if (useIdentityNumber) {
            in = new ByteArrayInputStream(buffer, 4, buffer.length - 4);
        } else {
            in = new ByteArrayInputStream(buffer);
        }
        ObjectInputStream ois = buildObjectInputStream(in);
        return ois.readObject();
    
<methods>public void <init>(boolean) ,public java.lang.Object apply(byte[]) ,public boolean isUseIdentityNumber() ,public void setDecoderMap(com.alicp.jetcache.support.DecoderMap) <variables>private com.alicp.jetcache.support.DecoderMap decoderMap,protected boolean useIdentityNumber