序列化的对象如下

public class MixedData{

private Proto.RepeatedModel protoData;

private int normalData;

}

proto模型定义如下

message RepeatedModel {

repeated int32 data;

}

关键报错信息如下

Caused by: java.lang.UnsupportedOperationException

at java.util.Collections$UnmodifiableCollection.add(Collections.java:1075)

at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:109)

at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:22)

at com.esotericsoftware.kryo.Kryo.readObject(Kryo.java:679)

at com.esotericsoftware.kryo.serializers.ObjectField.read(ObjectField.java:106)

... 48 more

原因很清楚, 对于repeated字段,proto编译生成的是UnmodifiedList,kryo中没有注册UnModifiedList的序列化器,使用了CollectionSerializer去做序列化,CollectionSerializer的反序列化策略关键点如下

for (int i = 0; i < length; i++)

collection.add(kryo.readObject(input, elementClass, serializer));

这里的collection是由序列化使用的list类型决定的,在本文就是UnmodifiableCollection,一切至此明了.

一个可行的解决方案如下(未测试)

添加如下依赖

de.javakaffee

kryo-serializers

0.42

在kryo配置处注册serializer

this.register(UnmodifiableCollectionsSerializer.class);

java kryo register_kryo处理unmodifiedList报错问题相关推荐

  1. 【hadoop】java 获取 yarn app 信息 报错 ConfiguredRMFailoverProxyProvider - Failing over to rm2

    文章目录 1.概述 1.概述 java 获取 yarn app 信息 报错 ConfiguredRMFailoverProxyProvider - Failing over to rm2 2022-0 ...

  2. JMETER java.net.SocketException: Connection reset 报错解决方案

    JMETER java.net.SocketException: Connection reset 报错解决方案 参考文章: (1)JMETER java.net.SocketException: C ...

  3. JAVA类运行时,报错“Error occurred during initialization of boot layer”

    JAVA类运行时,报错"Error occurred during initialization of boot layer" 网上查原因是由于JDK9及以上版本引入了模块,所以在 ...

  4. 记录一个bug 关于 java 解压缩包 写入本地报错 :java.io.FileNotFoundException(系统找不到指定的路径。)

    记录一个bug 关于 java 解压缩包 写入本地报错 :java.io.FileNotFoundException(系统找不到指定的路径.) 第一想法是路径问题: 1.检查文件路径是否正确 2.另外 ...

  5. java项目如何启动tomcat服务器,Java web项目启动Tomcat报错解决方案

    Java web项目启动Tomcat报错解决方案 点击运行项目时显示 A Java Exception has occurred. 'Starting Tomcat v9.0 Server at lo ...

  6. java.sql.SQLSyntaxErrorException: Unknown database报错问题

    java.sql.SQLSyntaxErrorException: Unknown database报错问题 一.出现原因 笔者在测试接口启动项目Java连接MySQL数据库时,出现了如下报错:jav ...

  7. 软件开发Linux环境下,java通过JNA调用so报错,求大神解答,感激不尽。

    软件开发Linux环境下,java通过JNA调用so报错,求大神解答,感激不尽. 图片说明 最佳答案: 专家已采纳 先用c等调用一下so,看函数能否正确调用 文章来源:https://ask.csdn ...

  8. java找不到对象报错_java找不到对象报错

    java找不到对象报错 [2021-02-04 02:18:22]  简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace("/(\ ...

  9. (007) java后台开发之Scanner报错java.util.NoSuchElementException

    在测试Scanner 时写了两次 .close(); 结果运行报错. 原因参考:http://www.cnblogs.com/qingyibusi/p/5812725.html 一个方法A使用了Sca ...

最新文章

  1. SpringBoot中实现quartz定时任务
  2. OracleDB的数据库名,实例名,服务名,数据库域名,全局数据库名的简单介绍
  3. 导出Excel神器最终版
  4. 线程的创建方式及Runnable与Callable的区别
  5. html自动跳转页面,HTML实现页面自动跳转的五种方法
  6. 博主力推!!NRF52832 BLE 抓包sniffer来了!附带安装使用说明
  7. FCSAN存储与服务器关联映射 在Linux系统中如何识别操作
  8. 山东省第八届 ACM 省赛 Parity check (规律、水)
  9. 随机密码生成Python
  10. 蚂蚁算法python_Python编程实现蚁群算法详解
  11. android系统优化排行,性能最强的10大安卓手机排行,你用的排第几?
  12. C语言中||和能同时出现在一条语句中吗?
  13. 三菱CC-link IE field basic 控制伺服轴
  14. 阀门的开关方向_阀门的开关方向如何正确操作阀门
  15. C#利用zedgraph绘制曲线
  16. SIM800_基本指令调试笔记
  17. 第一篇:DDR3和mig的介绍
  18. web端输出打印地图(ArcGIS api for Javascript)一、地图打印模板的制作
  19. Easylogging++ Verbose日志详解
  20. 违禁词查询 麦谈帮API数据接口

热门文章

  1. 【区域赛总结】2015ACM-ICPC北京区域赛
  2. MATLAB画阶梯图
  3. K8S容器编排之POD健康监控
  4. 关于蓝牙开发,必须注意的广播
  5. [PHP] 算法-请找出带环链表的环的入口结点的PHP实现
  6. Android 俄罗斯方块
  7. UI自动化测试(一)
  8. 解决:FTP隔离用户ftp将数据发送到服务器之前不加密或编码,要保护密码和数据数据,请用WEB文件夹(WenDAV)
  9. 抽象类和接口都不能被实例化
  10. Vue项目中ico问题