Java的序列化机制

1. 所有实现序列化的类都必须实现Serializable接口,序列化有如下两个特点:

  • 如果一个类可以被序列化,那么它的子类也可以被序列化
  • 由于static代表类成员,trasient代表对象的临时数据,因此被声名为这两种类型的数据成员是不能被序列话的

2. 序列化和反序列化的实例

package StreamLearn;

import java.io.*;

/**
 * Created by liujinhong on 2017/3/6.
 */

/**
 * 序列化和返序列化实例
 */
public class SerialObjectTest {
    public static void main(String[] args) {
        People p = new People();
        ObjectOutputStream oos = null;
        ObjectInputStream ois = null;

        //序列化
        try {
            FileOutputStream fos = new FileOutputStream("/Users/liujinhong/Desktop/test/ttt");
            oos = new ObjectOutputStream(fos);

            oos.writeObject(p);
        } catch (Exception e) {
            System.out.println(e);
        } finally {

        }

        //反序列化
        People p1;
        try {
            FileInputStream fis = new FileInputStream("/Users/liujinhong/Desktop/test/ttt");
            ois = new ObjectInputStream(fis);

            p1 = (People) ois.readObject();

            System.out.println(p1.a);
            System.out.println(p1.b);
            System.out.println(p1.book.id);
        } catch (Exception e) {
            System.out.println(e);
        } finally {

        }
    }
}

class People implements Serializable {
    public int a = 1;
    public transient int b = 2;
    public Book book = new Book();
}

class Book implements Serializable {
    public int id = 1;
}

3. 什么情况下需要使用序列化?

  • 通过网络来发送对象,或对象的状态需要被持久化到数据库或文件中
  • 序列化能实现深复制,即可以复制引用的对象

4. serialVersionUID作用?

在序列化和反序列化的过程中,serialVersionUID起着非常重要的作用,每一个类都有一个特定的serialVersionUID,在反序列化的过程中通过serialVersionUID来判断类的兼容性。如果不兼容会跑出InvalidClassException异常。

5. 自定义serialVersionUID的优点?

  • 提高程序运行效率
  • 提高程序在不同平台上的兼容性
  • 增强各个版本的可兼容性
时间: 2024-08-02 15:14:29

Java的序列化机制的相关文章

java 序列化机制深度解析

概要 序列化机制允许将实现序列化的Java对象转换为字节序列,这些字节序列可以被保存在磁盘上或通过网络传输,以备以后重新恢复原来的对象,序列化机制使得对象可以脱离程序的运行而独立存在 可序列化的类包括:实现了Serializable的类,数组,枚举,String类也是可序列化对象 由于序列化保存的是对象的状态,因此不会保存类的静态变量 -通过ObjectOutputStream和ObjectInputStream对对象进行序列化及反序列化 虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一

Java序列化机制原理

Java序列化就是将一个对象转化为一个二进制表示的字节数组,通过保存或则转移这些二进制数组达到持久化的目的.要实现序列化,需要实现java.io.Serializable接口.反序列化是和序列化相反的过程,就是把二进制数组转化为对象的过程.在反序列化的时候,必须有原始类的模板才能将对象还原.从这个过程我们可以猜测到,序列化过程并不想class文件那样保存类的完整的结构信息.下面我们以一个简单的例子来看一下,序列化的时候都保存了哪些信息.代码如下: package com.ysl; import

71. Java中序列化的serialVersionUID作用

Java序列化是将一个对象编码成一个字节流,反序列化将字节流编码转换成一个对象. 序列化是Java中实现持久化存储的一种方法:为数据传输提供了线路级对象表示法. Java的序列化机制是通过在运行时判断类的serialVersionUID来验证版本一致性的.在进行反序列化时,JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常. Eclipse中The

Hadoop序列化机制及实例

序列化 1.什么是序列化? 将结构化对象转换成字节流以便于进行网络传输或写入持久存储的过程. 2.什么是反序列化? 将字节流转换为一系列结构化对象的过程. 序列化用途: 1.作为一种持久化格式. 2.作为一种通信的数据格式. 3.作为一种数据拷贝.克隆机制. Java序列化和反序列化 1.创建一个对象实现了Serializable 2.序列化:ObjectOutputStream.writeObject(序列化对象) 反序列化:ObjectInputStream.readObject()返回序列

Java 对象序列化详解以及实例实现和源码下载

Java中的序列化机制有两种实现方式: 一种是实现Serializable接口 另一种是实现Externalizable接口 区别: 实现Serializable接口 1 系统自动储存必要的信息 2 Java内建支持,易于实现,只需实现该接口即可,无须任何代码支持 3 性能略差 实现Externalizable接口 1 程序员决定存储哪些信息 2 仅仅提供两个空方法,实现该接口必须为两个空方法提供实现 3 性能略好 一 由于实现Externalizable接口导致了编程复杂度的增加,所以大部分时

java 对象序列化 RMI

对于一个存在于Java虚拟机中的对象来说,其内部的状态只保持在内存中.JVM停止之后,这些状态就丢失了.在很多情况下,对象的内部状态是需要被持久化下来的.提到持久化,最直接的做法是保存到文件系统或是数据库之中.这种做法一般涉及到自定义存储格式以及繁琐的数据转换.对象关系映射(Object-relational mapping)是一种典型的用关系数据库来持久化对象的方式,也存在很多直接存储对象的对象数据库.对象序列化机制(object serialization)是Java语言内建的一种对象持久化

使用Serializable接口进行JAVA的序列化和反序列化

OBJECT STREAMS – SERIALIZATION AND DESERIALIZATION IN JAVA EXAMPLE USING SERIALIZABLE INTERFACE Hitesh Garg | November 7, 2014 | io | 9 Comments In the previous java tutorials I have discussed about basic of java streams, byte streams, then a modifie

Java序列化与反序列化学习(三):序列化机制与原理

Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的 过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用 一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性 Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种

Java序列化机制剖析

Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.Java序列化API提供一种处理对象序列化的标准机制.在这里你能学到如何序列化一个对象,什么时候需要序列化以及Java序列化的算法,我们用一个实例来示范序列化以后的字节是如何描述一个对象的信息的. 序列化的必要性 Java中,一切都是对象,在分布式环境中经常需要将Object从这一端网络或设备传递到另一端.这就需要有一种可以