加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – kryo.readObject导致与ArrayList的NullPointerException

发布时间:2020-12-15 02:54:19 所属栏目:Java 来源:网络整理
导读:当我使用kryo反序列化ArrayList对象时,我得到一个NullPointerException. Caused by: java.lang.NullPointerException at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:215) at java.util.ArrayList.ensureCapacity(ArrayList.java:199) at co
当我使用kryo反序列化ArrayList对象时,我得到一个NullPointerException.
Caused by: java.lang.NullPointerException   
at java.util.ArrayList.ensureExplicitCapacity(ArrayList.java:215)   
at java.util.ArrayList.ensureCapacity(ArrayList.java:199)   
at com.esotericsoftware.kryo.serializers.CollectionSerializer.read(CollectionSerializer.java:96)
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)

我可以看到StdInstantiatorStrategy在不调用其构造函数的情况下创建了一个ArrayList,而其中一个字段未初始化导致异常.

文档说首先应该调用无参数构造函数,如果没有可用的话,应该使用StdInstantiatorStrategy来进行字段初始化.

我究竟做错了什么?

解决方法

随着kryo版本2.24,呼叫
kryo.setInstantiatorStrategy(new StdInstantiatorStrategy());

覆盖使用class no argument构造函数的默认实例化器策略(如果存在).正确的方法是打电话:

((Kryo.DefaultInstantiatorStrategy) kryo.getInstantiatorStrategy()).setFallbackInstantiatorStrategy(new StdInstantiatorStrategy());

这在这里解释https://github.com/EsotericSoftware/kryo

我认为自2.21版以来这已经发生了变化

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读