You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 22:25:23