返回顶部
首页 > 资讯 > 精选 >Java自定义序列化行为的示例分析
  • 279
分享到

Java自定义序列化行为的示例分析

2023-06-17 13:06:00 279人浏览 八月长安
摘要

这篇文章给大家分享的是有关Java自定义序列化行为的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。正常情况下,一个类实现java序列化很简单,只需要implements Serializable接口即可,

这篇文章给大家分享的是有关Java自定义序列化行为的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

正常情况下,一个类实现java序列化很简单,只需要implements Serializable接口即可,之后该类在跨JVM的传输过程中会遵照默认java序列化规则序列化和反序列化;不同jvm版本之间序列化方式稍有不同,但基本上都是兼容的。

在某些特殊情况下,可能需要自定义序列化和反序列化的行为,看下面例子:

Java代码

class AbstractSerializeDemo {         private int x, y;             public void init(int x, int y) {             this.x = x;             this.y = y;         }             public int getX() {             return x;         }             public int getY() {             return y;         }             public void printXY() {             System.out.println("x:" + x + ";y:" + y);         }     }         public class SerializeDemo extends AbstractSerializeDemo implements Serializable {         private int z;             public SerializeDemo() {             super.init(10, 50);             z = 100;         }             public void printZ() {             super.printXY();             System.out.println("z:" + z);         }             public static void main(String[] args) throws ioException, ClassNotFoundException {             ByteArrayOutputStream bos = new ByteArrayOutputStream();             ObjectOutputStream out = new ObjectOutputStream(bos);             SerializeDemo sd = new SerializeDemo();             sd.printZ();             out.writeObject(sd);             ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(bos.toByteArray()));             SerializeDemo sd2 = (SerializeDemo) in.readObject();             sd2.printZ();         }     }

这段程序表示了一个可序列化的类继承自一个非序列化的有状态超类,期望的结果是,子类序列化以后传输并反序列化回来,原先的值域包括超类的值域都保持不变。

但是输出是:

Java代码

x:10;y:50    z:100    x:0;y:0    z:100

结果和期望不符,子类的值域保留下来了,但是超类的值域丢失了,这对jvm来说是正常的,因为超类不可序列化;

为了解决这个问题,只能自定义序列化行为,具体做法是在SerializeDemo里加入以下代码:

Java代码

private void writeObject(ObjectOutputStream os) throws IOException {           os.defaultWriteObject();//java对象序列化默认操作           os.writeInt(getX());           os.writeInt(getY());       }           private void readObject(ObjectInputStream is) throws IOException, ClassNotFoundException {           is.defaultReadObject();//java对象反序列化默认操作           int x=is.readInt();           int y=is.readInt();           super.init(x,y);       }

writeObject和readObject方法为JVM会在序列化和反序列化java对象时会分别调用的两个方法,修饰符都是private,没错。

我们在序列化的默认动作之后将超类里的两个值域x和y也写入object流;与之对应在反序列化的默认操作之后读入x和y两个值,然后调用超类的初始化方法。

再次执行程序之后的输出为:

Java代码

x:10;y:50    z:100    x:10;y:50    z:100

另外还有两个自定义序列化方法writeReplace和readResolve,分别用来在序列化之前替换序列化对象 和 在反序列化之后的对返回对象的处理。一般可以用来避免singleTon对象跨jvm序列化和反序列化时产生多个对象实例,事实上singleTon的对象一旦可序列化,它就不能保证singleTon了。JVM的Enum实现里就是重写了readResolve方法,由JVM保证Enum的值都是singleTon的,所以建议多使用Enum代替使用writeReplace和readResolve方法。

Java代码

private Object readResolve()         {             return INSTANCE;         }                 private Object writeReplace(){             return INSTANCE;         }

注:writeReplace调用在writeObject前;readResolve调用在readObject之后。

感谢各位的阅读!关于“Java自定义序列化行为的示例分析”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: Java自定义序列化行为的示例分析

本文链接: https://lsjlt.com/news/289292.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Java自定义序列化行为的示例分析
    这篇文章给大家分享的是有关Java自定义序列化行为的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。正常情况下,一个类实现java序列化很简单,只需要implements Serializable接口即可,...
    99+
    2023-06-17
  • Java序列化和反序列化示例分析
    这期内容当中小编将会给大家带来有关Java序列化和反序列化示例分析,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。序列化是为了把Java对象转化为字节序列(字节流)的过程。然后深拷贝是通过对流的操作来实现的...
    99+
    2023-06-26
  • Java中序列化与反序列化的示例分析
    这篇文章将为大家详细讲解有关Java中序列化与反序列化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。一、前言序列化:将对象转换为二进制序列在网络中传输或保存到磁盘反序列化:从网络或磁盘中将二进制...
    99+
    2023-06-15
  • phpunit自定义的示例分析
    这篇文章主要介绍phpunit自定义的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!下载:wget  https://phar.phpunit.de/ph...
    99+
    2024-04-02
  • springboot jackson自定义序列化和反序列化实例
    目录jackson自定义序列化和反序列序列化JsonSerializer最后请求http返回对象反序列化JsonDeserializer小结一下springboot 自定义序列化器j...
    99+
    2024-04-02
  • json序列化的示例分析
    这篇文章主要为大家展示了“json序列化的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“json序列化的示例分析”这篇文章吧。json序列化(javaBean转Json的细节)Java对...
    99+
    2023-06-29
  • Python中序列化与反序列化的示例分析
    这篇文章将为大家详细讲解有关Python中序列化与反序列化的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。初识序列化与反序列化什么是序列化?通俗一点来说,序列化就是将 对象的信息 或者 数据结构的...
    99+
    2023-06-29
  • Python反序列化的示例分析
    这篇文章给大家分享的是有关Python反序列化的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。Python反序列化漏洞Pickle序列化:pickle.dumps() 将对象序列化为字符串、pickle....
    99+
    2023-06-29
  • fastjson序列化时间自定义格式示例详解
    目录Java8 的日期相关 API首先建一个项目添加依赖配置类中注入 Spriing 容器写个接口做下测试Java8 的日期相关 API Java8 的日期相关 API用起来是真香,...
    99+
    2023-05-18
    fastjson序列化时间格式 fastjson序列化
  • java自定义序列化的具体使用
    目录1.问题引出 2.解决办法 3.另外一种自定义序列化机制(介绍Externalizable) 1.问题引出 在某些情况下,我们可能不想对于一个对象的所有field进行序列化,例...
    99+
    2024-04-02
  • Jil、json序列化和反序列化库的示例分析
    这篇文章主要介绍了Jil、json序列化和反序列化库的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Jil很牛,比Newtonsof...
    99+
    2024-04-02
  • Java抽象定义的示例分析
    小编给大家分享一下Java抽象定义的示例分析,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、概述在OOP这个概念中,所有的对象都是通过类来描述的;但是并不是所有...
    99+
    2023-06-14
  • angular4自定义组件的示例分析
    这篇文章主要为大家展示了“angular4自定义组件的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“angular4自定义组件的示例分析”这篇文章吧。在...
    99+
    2024-04-02
  • AngularJS自定义指令的示例分析
    这篇文章主要介绍AngularJS自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!前言除了 AngularJS 内置的指令外,我们还可以创建自定义指令。 通过 .d...
    99+
    2024-04-02
  • CSS自定义属性的示例分析
    这篇文章主要为大家展示了“CSS自定义属性的示例分析”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“CSS自定义属性的示例分析”这篇文章吧。 兼容性 第一个问...
    99+
    2024-04-02
  • Vue自定义指令的示例分析
    这篇文章主要介绍Vue自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!在 AngularJs 中,它的指令使用 directive ( name,factor_fu...
    99+
    2024-04-02
  • Vue.directive自定义指令的示例分析
    这篇文章主要介绍Vue.directive自定义指令的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1.复习一下Vue自定义指令的代码,结果出现一个很无语的结果,先贴代码。2...
    99+
    2024-04-02
  • Java对象的序列化和反序列化举例分析
    本篇内容介绍了“Java对象的序列化和反序列化举例分析”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、什么是序列化与反序列化?  序列化:...
    99+
    2023-06-19
  • JavaScript解析及序列化JSON的示例分析
    这篇文章将为大家详细讲解有关JavaScript解析及序列化JSON的示例分析,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。具体如下:JSON 之所以这么流行,是因为 J...
    99+
    2024-04-02
  • Vue Element UI自定义描述列表组件的示例分析
    这篇文章主要介绍Vue Element UI自定义描述列表组件的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!具体内容如下效果图写在前面写后台管理经常从列表点击查看详情,展示数据信息,Element UI虽然...
    99+
    2023-06-15
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作