67,515
社区成员
发帖
与我相关
我的任务
分享
serialize(T t) {
byte[] clzBytes = t.getClass().toString().getBytes(); // 将存储的protobuf实际类型取出并序列化
byte[] contentBytes = t.toByteArray(); // 内容序列化
byte[] fullPacket = Arrays.copyOf(new byte[]{((Integer) clzBytes.length).byteValue()}, 1 + clzBytes.length + contentBytes.length);
System.arraycopy(clzBytes, 0, fullPacket, 1, clzBytes.length);
System.arraycopy(contentBytes, 0, fullPacket, 1 + clzBytes.length, contentBytes.length);
return fullPacket;
}
然后在解码的时候,先解第一个字节获取得到 class 的长度,在解class的类型,在通过class反射实例parseFrom 内容体
public class ByteRedisSerializer implements RedisSerializer<byte[]> {
private final Charset charset;
public ByteRedisSerializer() {
this(Charset.forName("UTF8"));
}
public ByteRedisSerializer(Charset charset) {
Assert.notNull(charset, "Charset must not be null!");
this.charset = charset;
}
@Override
public byte[] serialize(byte[] t) throws SerializationException {
return t;
}
@Override
public byte[] deserialize(byte[] bytes) throws SerializationException {
return bytes;
}
}