首页 / 知识
具有不可序列化部分的Java序列化
2023-04-17 07:22:00

Java Serialization with non serializable parts我有:
在MyClass2中是无法序列化的属性。 如何序列化(和反序列化)此对象? 更正:MyClass2当然不是接口,而是类。 正如其他人指出的那样,Josh Bloch的Effective Java的第11章是有关Java序列化的必不可少的资源。 该章中与您的问题有关的几点:
我在下面写了一个简单的例子来说明这一点。
MyClass2只是一个接口,因此从技术上讲它没有属性,只有方法。话虽这么说,如果您有本身无法序列化的实例变量,那么我知道解决它的唯一方法就是声明这些字段为瞬态。 例如:
声明字段瞬变时,在序列化和反序列化过程中将忽略它。请记住,当使用瞬态字段反序列化对象时,该字段的值将始终为默认值(通常为null)。 请注意,您还可以覆盖类的readResolve()方法,以便根据其他系统状态初始化瞬态字段。 如果可能,可以将不可序列化的部分设置为瞬态
否则,您可以使用Kryo。 Kryo是一种用于Java的快速高效的对象图序列化框架(例如java.awt.Color的JAVA序列化需要170个字节,Kryo仅4个字节),它也可以序列化不可序列化的对象。 Kryo还可以执行自动的深层和浅层复制/克隆。 这是从对象到对象的直接复制,而不是 这是一个如何使用kryo的示例
也可以通过注册确切的序列化器来压缩序列化的对象:
如果您可以修改MyClass2,解决此问题的最简单方法是声明属性transient。
您将需要实现 取决于为什么MyClass2的成员不可序列化。 如果有很好的理由不能以序列化的形式表示MyClass2,那么很有可能,同样的原因也适用于MyClass,因为它是子类。 可以通过实现readObject和writeObject为MyClass编写自定义的序列化表格,以这种方式可以从序列化数据中适当地重新创建MyClass中MyClass2实例数据的状态。如果MyClass2的API是固定的,而您不能添加Serializable,那么这就是解决方法。 但是首先您应该弄清楚为什么MyClass2无法序列化,并可能对其进行更改。 出现了几种可能性,我在这里恢复它们:
您可以先查看" transient"关键字,该关键字将字段标记为不属于对象的持久状态。 XStream是一个出色的库,可以对任何对象进行快速的Java到XML序列化,无论它是否可序列化。即使XML目标格式不适合您,您也可以使用源代码学习如何做。 串行化不可序列化类(或至少其子类)的实例的有用方法是串行代理。本质上,您实现writeReplace以返回完全不同的可序列化类的实例,该类可实现readResolve以返回原始对象的副本。我写了一个在Usenet上序列化java.awt.BasicStroke的示例 |
最新内容
相关内容
linux反序列化命令?
linux反序列化命令?,状态,数据,情况,环境,网络,适当,下来,接口,对象,序列,序列化与反序列化把对象转换为字节序列的过程称为对象的序列化 。linux无效对象的命令?
linux无效对象的命令?,软件,系统,单位,网络,管理,术语,检测,电脑,环境,风险,linux疑问:普通用户的ifconfig命令无法执行,如何解决?建议这个操linux命令查看包属性?
linux命令查看包属性?,时间,系统,信息,状态,命令,文件,通讯录,管理,情况,标准,Linux文件相关命令命令一:cat cat命令应该是在Linux中查看文件内linux内核属性命令?
linux内核属性命令?,系统,地址,时间,信息,标准,管理,数据,工作,百分比,内核,一般优化linux的内核,需要优化什么参数1、说起优化,其实最好的优化pythonPandas Series对象有哪些属
pythonPandas Series对象有哪些属性?,工具,数据,数字,分析,培训,属性,数据类型,数组,对象,索引,想必大家都知道pandas,它是基于Numpy的一种工具python是面向对象还是面向过程的
python是面向对象还是面向过程的,数据,代码,基础,形态,培训,术语,设计,对象,过程,语言,Python虽然是解释型语言,但从设计之初就已经是一门面向如何在Python中定义类方法和修改类
如何在Python中定义类方法和修改类属性?,代码,方法,培训,对象,实例,定义,结果,示例,赋值,属性,Python中的类还可定义使用@classmethod修饰的类实现Python对象的持久化存储
实现Python对象的持久化存储,数据,对象,系统,函数,培训,标准,环境,管理,参数,文件,Python中有个序列化过程叫作pickle,它能够实现任意对象与文python之访问对象的元数据
python之访问对象的元数据,数据,异常,培训,属性,模块,对象,类型,定义,文档,实例,当你对一个你构造的对象使用dir()时,可能会发现列表中的很多python之执行对象
python之执行对象,代码,数据,信息,概念,培训,通用,对象,属性,方法,赋值,有时候我们会碰到这样的需求,需要执行对象的某个方法,或是需要对对象的Python之数据库游标对象详解
Python之数据库游标对象详解,软件,代码,一致,培训,数据库,游标,对象,方法,事务,操作,常用数据库:MySQL、Oracle、SQLite但是包嵌入到Python中Python 中的一切皆对象
Python 中的一切皆对象,代码,数字,包装,培训,对象,函数,赋值,血统,字符串,变量,在Python中,OOP是完全不是必须的,在初学阶段也不需要使用类,利用