`
xixinfei
  • 浏览: 414060 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java 序列化与反序化

阅读更多
java 序列化与反序化

.java序列化的用途

  1.将数据持久化到文件中

  2.在网络上传输字节序列

  两种功能的示意图如下:

  

.实现对象序列化的条件

 1. 只有实现了Serializable(默认的序列化方式)Externalizable(继承Serializable接口,自定义实现来控制序列化时的行为)接口的类才能被序列化.

 2..利用java.io.ObjectOutputStream类的writeObject(Object obj)来实现对象序列化操作,并将字节序列写入到到目标输出流中.利用它的readObject()方法从源输入流中读取字节流,再将数据反序列化成一个对象并返回该对象.

.通过实现Serializable接口序列化.和反序列化

   1.如果类A实现了Serializable接口,则对类A的非static,transient的实例变量进行序列化和反序列化

    此方法不能控制序列化时的行为.以下两种方法则行.

   2.如果类A既实现了Serializable接口,又定义了writeObject(Object obj)方法和readObject()方法,由调用这两个方法进行序列化和反序列化.

   3.如果类A实现了Externalizable接口,由该类必须实现writeExternal(ObjectOutput out)方法和readExtername()方法.在这种情况下,将按照这两个方法进行对象的序列化和反序列化.

.对象序列化和对象反序列化的步骤

   对象序列化步骤:

   1.创建一个对象输出流

   2.通过对象输出流的writeObject(Objectobj)方法写对象

  :

     ObjectOutputStream out = newObjectOutputStream(new FileOutputStream(filePath));//filePath:文件路径

     out.writeObject(obj);//obj:要写入文件的对象

   对象反序列化步骤:

   1.创建一个对象输入流

   2.通过对象输入流的readObject(j)方法读取对象.(读取对象时是按照对列方式进行的,既先进先出)

   :

     ObjectInputStream  in = new ObjectInputStream (newFileInputStream(filePath));

     in.readObject();//读取对象

.对于实现了Serializable接口反序列化过程

   1.如果内存中的对象所属的类还没有加载,则先加载并初始化这个类,如果在classpath中找不到这个类,则抛出ClassNotFoundException

   2.在反序列化时,不能调用类的任何构造方法.

   3.如果此类引用了其他类或者关联了其他类,则在序列化时,将同时序列化它所引用的类.

. Serializable接口下控制序列化行为

 1.实现Serializable接口,并提供private void writeObject(Object obj),private void  readObject()方法.如果需要默认序列化方法或者默认反序列化方法,则可以在这两个方法中调用ObjectOutputStreamdefaultWriteObject()方法或者ObjectOutputStreamdefaultReadObject()方法

   2.如何确定需要用户自定义序列化方式,从而控制序列化的行为,如下所示:

    >确保序列化的安全性,对敏感信息的隐藏者加密.如果序列化加密,则反序列化时要解密.

    >确保对象的成员变量符合正解的约束条件

    >优化序列化的性能.主要是避免过多序列化类的关联类.

    >便于更好地封装类的内部数据,确保类的接口不会被类的内部实现所约束.

 .实现Externalizable接口

    1.实现此接口的类必须自己控制序列化和反序列化时的行为.因此必须实现public void writeExternal(ObjectOutput out)方法和public void readExtername()方法.在对实现了Externalizable接口的类进行反序列化时,会先调用类的不带参数的构造方法,这是有别于默认反序列化方式的.所以类必须要有一个public访问权限的不带参数的构造方法.

 .可序列化类的不同版本的序列化兼容性

    对于同一个类的两个不同版本,即便它们的序列化版本号相同,也不一定能兼容.因为兼容性不仅取决于序列化版本号,还取决于类的不同版本的实现细节和序列化细节.

分享到:
评论

相关推荐

    java反序列化工具

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。在Java应用程序中,序列化用于保存对象的状态以便稍后恢复,或者在网络间传输对象。然而,这个过程也可能引入...

    Protocol Buffer序列化对比Java序列化.

    【Protocol Buffer序列化对比Java序列化】 Protocol Buffer(简称PB)是Google开发的一种高效的数据序列化协议,而Java序列化是Java平台内置的一种序列化机制。两者的主要目标都是将对象转化为字节数组,便于在网络...

    将dataset json序列化和反序列化成dataset (非常不容易做完了)

    .net 将dataset json序列化和反序列化成dataset JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScript(Standard ECMA-262 3rd Edition - ...

    Java反序列化终极测试工具

    3. **兼容性测试**:确保反序列化过程在不同版本的Java平台上都能正常工作,以及与各种序列化库(如Apache Commons Lang的SerializationUtils)的兼容性。 4. **性能评估**:测试反序列化操作的性能,包括时间和...

    Java反序列化工具.zip

    标题"Java反序列化工具.zip"暗示了这个压缩包包含了一些工具,这些工具可能是为了帮助开发者理解、测试或者防御Java反序列化漏洞而设计的。可能包括模拟攻击的payload生成器,或者用于检测和修复此类漏洞的分析工具...

    Java反序列化终极测试工具.zip

    Java反序列化是一种将已序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种常见方式。然而,反序列化也可能带来安全风险,尤其是当处理来自不可信源的数据时,恶意用户可能会利用这些漏洞执行任意...

    java序列化全解

    Java序列化是Java平台中的一种核心机制,它允许对象的状态被转换成字节流,以便存储到磁盘、数据库,或者在网络中进行传输。这对于实现持久化、远程方法调用(RMI)以及Enterprise JavaBeans(EJB)等高级功能至关...

    java反序列化终极测试工具.zip

    Java反序列化是一种将之前序列化的对象状态转换回对象的过程,它是Java平台中持久化数据的一种方式。在软件开发中,特别是在服务器端应用中,反序列化常常用于在网络传输或存储后恢复对象的状态。然而,如果这个过程...

    Java反序列化漏洞探析及其修复方法研究.pdf

    Java反序列化漏洞的产生原理主要是在对象反序列化过程中,由于程序对输入数据控制不严,可能会产生非预期的对象,进而可能带来任意代码执行的问题。攻击者可以利用这一漏洞,通过精心构造的数据序列化后,由应用程序...

    java反序列香草

    综上所述,"java反序列香草"工具可能是安全社区用来测试和诊断Java应用反序列化漏洞的一个实用工具,帮助用户发现和修复潜在的安全问题,确保系统的稳定和安全。了解并掌握这些知识点对于Java开发人员和安全专家来说...

    FST:快速Java序列化的替代品

    **FST:快速Java序列化的替代方案** 在Java开发中,序列化是一个常见的需求,它允许将对象的状态转换为字节流,以便于存储或网络传输。标准的Java序列化虽然方便,但在处理大量数据时,性能往往成为瓶颈。这时,FST...

    Java对象序列化和反序列化工具Xson.zip

    Xson是一个Java对象序列化和反序列化程序。支持Java对象到字节数组的序列化,和从字节数组到Java对象的反序列化。 Maven:  <groupId>com.github.xsonorg</groupId>  <artifactId>xson-core  <version>1.0.1 ...

    07-Java序列化面试题(10题)-新增.pdf

    Java序列化面试题(10题) 在 Java 中,序列化是一种用于处理对象流的机制,它可以将对象的内容进行流化,使其可以被读写和传输。下面是 10 个与 Java 序列化相关的面试题目: 1. 什么是 Java 序列化,如何实现 ...

    java反序列化漏洞-验证.rar

    1. **Java反序列化漏洞**:当不信任的数据源提供的序列化对象被反序列化时,如果对象的类包含危险的方法(如`ObjectInputStream.readObject()`),攻击者可以构造特殊的序列化数据来触发这些方法,执行任意代码。...

    Java反序列化终极检测工具_Jboss & Weblogic & Websphere.zip

    Java反序列化是一个重要的编程概念,特别是在企业级应用开发中,如JBoss、WebLogic和WebSphere这样的服务器环境中。这个压缩包文件“Java反序列化终极检测工具_Jboss & Weblogic & Websphere.zip”似乎包含了一些...

    Java反序列化漏洞利用工具.zip

    Java反序列化漏洞是软件安全领域的一个重要话题,它涉及到Java应用程序在处理序列化和反序列化过程中的安全问题。序列化是将对象状态转换为可存储或传输的数据格式的过程,而反序列化则是将这些数据恢复为原来的对象...

    java序列化与反序列化

    Java序列化是将Java对象转换为字节流的过程,以便可以在磁盘、数据库或网络上存储或传输这些对象。这使得我们能够保存对象的状态,并在稍后的时间点恢复它,或者在网络之间传递对象。反序列化是相反的过程,即从字节...

    Java对象序列化标准最新版

    ### Java对象序列化标准知识点详解 #### 一、系统架构概览 **1.1 概览** Java 对象序列化是一种将Java对象的...以上内容涵盖了Java序列化标准的关键知识点,深入了解这些概念有助于更好地理解和应用Java序列化技术。

    免费开源!!一个 Java 序列化/反序列化库,用于将 Java 对象转换为 JSON 并返回

    Gson 是一个 Java 库,可用于将 Java 对象转换为其 JSON 表示形式。它还可用于将 JSON 字符串转换为等效的 Java 对象。Gson 可以处理任意 Java 对象,包括您没有源代码的现有对象。 有一些开源项目可以将 Java 对象...

Global site tag (gtag.js) - Google Analytics