如何为ArrayList<byte[]>字段定义ClassDefinition并实现VersionedPortable?
实现VersionedPortable处理ArrayList<byte[]>字段的方案
一、ClassDefinition的正确定义
你之前使用addPortableArrayField是错误的,因为byte[]不属于Portable对象类型,应该改用addArrayField方法,指定元素类型为FieldType.BYTE_ARRAY。完整代码如下:
new ClassDefinitionBuilder(FACTORY_ID, MESSAGE_BUNDLE_CLASS_ID, VERSION_ID) .addArrayField("someMessages", FieldType.BYTE_ARRAY) .build();
二、字段的读写操作
写操作(实现writePortable方法)
需要将ArrayList<byte[]>转换为byte[][]数组,再通过PortableWriter的writeByteArrayArray方法完成写入:
@Override public void writePortable(PortableWriter writer) throws IOException { byte[][] messagesArray = someMessages.toArray(new byte[someMessages.size()][]); writer.writeByteArrayArray("someMessages", messagesArray); }
读操作(实现readPortable方法)
通过PortableReader的readByteArrayArray方法读取到byte[][]数组,再转换为ArrayList<byte[]>:
@Override public void readPortable(PortableReader reader) throws IOException { byte[][] messagesArray = reader.readByteArrayArray("someMessages"); someMessages = new ArrayList<>(Arrays.asList(messagesArray)); }
内容的提问来源于stack exchange,提问作者Niels Harremoes
相关产品推荐
相关产品推荐

