ByteBufferStream是否需要close?
gwenson opened this issue · comments
ByteBufferStream究竟需不需要close?
ByteBufferStream怎么获取byte[]?是toArray()?还是 byteBufferStream.buff.array()?
还有能否给API加点注释吗?
还有一个问题是:我用
List<StraightCoord> data =
ByteBufferStream serialize = HproseFormatter.serialize(data);
byte[] value = serialize.toArray();
把value存到redis,
服务重启后在把redis的value值反序列化
List<StraightCoord> unserialize = (List<StraightCoord>) HproseFormatter.unserialize(value);
就提示:hprose.util.LinkedCaseInsensitiveMap cannot be cast to dto.StraightCoord
请问这是怎么回事?
因为你可以把 ByteBufferStream 里面的 Buffer 直接拿出来用,当你拿出来用之后,就不能 close 了,close 的话,会把 Buffer 放会池中被重用,到时候会跟你拿出来用的 Buffer 冲突。如果你只是 toArray() 了,并没有直接使用其中的 Buffer,那么你就可以放心的 close 了。其实就算不 close,也不过是不把 Buffer 所引用的 byte[] 放回到池中,它会随着 ByteBufferStream 对象被回收一同被回收。
反序列化时,你的 StraightCoord 类型没有注册,所以它找不到这个类,就会按照 Map 序列化了,而 Map 并不能转换为你定义的 StraightCoord 类型,所以会报错。你反序列化之前,先注册一下这个类型就可以了。
怎么注册?
HproseClassManager.register(StraightCoord.class, "StraightCoord");
这样吗?
嗯,对,序列化和反序列化前都写上。