设为首页 加入收藏

TOP

Java 序列化与反序列化
2017-01-02 08:15:17 】 浏览:384
Tags:Java 序列化

1、什么是序列化?为什么要序列化?


    Java 序列化就是指将对象转换为字节序列的过程,而反序列化则是只将字节序列转换成目标对象的过程。


    我们都知道,在进行浏览器访问的时候,我们看到的文本、图片、音频、视频等都是通过二进制序列进行传输的,那么如果我们需要将Java对象进行传输的时候,是不是也应该先将对象进行序列化?答案是肯定的,我们需要先将Java对象进行序列化,然后通过网络,IO进行传输,当到达目的地之后,再进行反序列化获取到我们想要的对象,最后完成通信。


2、如何实现序列化


  2.1、使用到JDK中关键类 ObjectOutputStream 和ObjectInputStream


    ObjectOutputStream 类中:通过使用writeObject(Object object) 方法,将对象以二进制格式进行写入。


    ObjectInputStream 类中:通过使用readObject()方法,从输入流中读取二进制流,转换成对象。


  2.2、目标对象需要先实现 Seriable接口


我们创建一个Student类:


        


      代码中Student类实现了Serializable 接口,并且生成了一个版本号:


      首先:


      1、Serializable 接口的作用只是用来标识我们这个类是需要进行序列化,并且Serializable 接口中并没有提供任何方法。


      2、serialVersionUid序列化版本号的作用是用来区分我们所编写的类的版本,用于判断反序列化时类的版本是否一直,如果不一致会出现版本不一致异常。


      3、transient 关键字,主要用来忽略我们不希望进行序列化的变量



    2.3、将对象进行序列或和反序列化


      2.3.1 第一种写入方式:


      创建对象Student ,然后通过ObjectOutputStream类中的writeObject()方法,将对象输出到文件中。


      然后通过ObjectinputStream 类中的readObject()方法反序列化,获取对象。



       2.3.2 第二种写入方式:


在Student 类中实现writeObject()和readObject()方法:


      通过这中方式进行序列话,我们可以自定义想要进行序列化的变量,将输入流和输出流传入对线实例中,然后进行序列化以及反序列化。


  


      2.3.3 第三种写入方式:


Student 实现Externalnalizable接口 而不实现Serializable 接口


 Externaliable 接口是 Serializable 的子类,有着和Serializable接口同样的功能:



   通过和前面的第二种写入方法对比,我们可以发现他们的实现原理都是十分的类似,不过实现Externalnalizable接口 并不支持第一种序列化方法,它只能够通过实现接口中的writeExternal()和readExternal()方法实现对象的序列化。




3、面试中关于序列化的问题:


    1、什么是序列化,如何实现序列化


        java中对象的序列化就是将对象转换成二进制序列,反序列化则是将二进制序列转换成对象


        Java 实现序列化有多种方式


          1、首先需要使用到工具类ObjectInputStream 和ObjectOutputStream 两个IO类


          2、实现Serializable 接口:


              有两种具体序列化方法:


                  2.1 直接通过ObjectOutputStream 和 ObjectInputStream 类中的 writeObject()和readObject()方法


                  2.2 通过在序列化对象中实现writeObject()和readObject()方法,传入ObjectOutputStream和ObjectInputStream对象,完成序列化


          3、实现Externalizable 接口:


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇浅谈单片机中C语言与汇编语言的转.. 下一篇Java 中包的概念,常量,静态与继..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目