Java 序列化 序列化的用处: 对象需要远程调用(比如说socket) 对象需要在不同的进程间调用 对象需要永久存放在硬盘上(脱离对象运行环境,编写成一个以字符串形式存在的对象,需要时,通过获取字符串,反序列化就能实现获取一个对象) 首先说明一下序列化的知识: java 中的序列化(serialization)机制能够将一个实例对象的状态信息写入到一个字节流中,使其可以通过socket 进行传输、或 者持久化存储到数据库或文件系统中;然后在需要的时候,可以根据字节流中的信息来重构一个相同的对象
序列化机制在java 中有着广泛的应用,EJB、 RMI 等技术都是以此为基础的
序列化机制是通过java
ObjectOutputStream 类和java
ObjectInputStream 类来实现的
在 序列化(serialize)一个对象的时候,会先实例化一个ObjectOutputStream 对象,然后调用其writeObject()方法;在 反序列化(deserialize)的时候,则会实例化一个ObjectInputStream 对象,然后调用其readObject()方法
Java 的序列化机制是通过在运行时判断类的serialVersionUID 来验证版本一致性的
在进行反序列化时,JVM 会把传来的字节流中 的serialVersionUID 与本地相应实体(类)的serialVersionUID 进行比较,如果相同就认为是一致的,可以进行反序列化,否则 就会出现序列化版本不一致的异常
当实现java
Serializable 接口的实体(类)没有显式地定义一个名为serialVersionUID, 类型为 long 的变 量时,Java 序列化机制会根据编译的class 自动生成一个serialVersionUID 作序列 化 版