2017-11-05 20:42:06

序列化流:把对象按照流的方式存入文本文件或者在网络中传输。 对象 -- 流数据(ObjectOutputStream)

反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象。 流数据 -- 对象(ObjectInputStream)

  • ObjectOutputStream

ObjectOutputStream:ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream(反序列化) 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。

注意:要被序列化的类需要实现Serializable接口,否则就不能进行序列化,但是这个类是个标记接口,就是没有需要重写的方法。

*构造方法

*常用方法

  • ObjectInputStream

ObjectInputStream:ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。

ObjectOutputStream 和 ObjectInputStream 分别与 FileOutputStream 和 FileInputStream 一起使用时,可以为应用程序提供对对象图形的持久存储。ObjectInputStream 用于恢复那些以前序列化的对象。其他用途包括使用套接字流在主机之间传递对象,或者用于编组和解组远程通信系统中的实参和形参。

*构造方法

*常用方法

import java.io.*;

public class Demo5 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//write();
read();
} public static void write()throws IOException{
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:/test.txt")); // 类需要有序列化接口才能被序列化
Student st = new Student("张三",20); // 序列化
oos.writeObject(st); oos.close();
} public static void read() throws IOException, ClassNotFoundException {
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:/test.txt")); //反序列化
Object obj = ois.readObject(); ois.close(); //输出对象
System.out.println(obj); }
} import java.io.Serializable; public class Student implements Serializable{
private String name;
private Integer age; Student(String name,int age)
{
this.name=name;
this.age=age;
} }

问题一、如果在读取之前修改了Student类那么在read()函数的执行过程中会产生一个错误:

Exception in thread "main" java.io.InvalidClassException:
DemoFile.Student; local class incompatible:
stream classdesc serialVersionUID = -8639914051049964771,
local class serialVersionUID = -7579084536321238113

原因是:由于Student类实现了序列化接口,所以会生成一个序列化的标记值,但是如果你修改了Student类,那么这个序列化值就会发生变化。在读取的时候会发现序列化值不匹配的问题,就会报错。

解决方法就是是这个序列号变成常量,这样的化,我们在修改类后,它的数据读取就不会产生上述的问题。

public class Student implements Serializable{

    private static final long serialVersionUID = -7579084536321238113L;

    private String name;
private int age;
// int age; Student(String name,int age)
{
this.name=name;
this.age=age;
} }

问题二:类中的成员变量不被序列化的方法 : 加上 transient 关键字。

Java IO流-序列化流和反序列化流的更多相关文章

  1. JAVA IO分析二:字节数组流、基本数据&对象类型的数据流、打印流

    上一节,我们分析了常见的节点流(FileInputStream/FileOutputStream  FileReader/FileWrite)和常见的处理流(BufferedInputStream/B ...

  2. ObjectOutputStream:对象的序列化流 ObjectInputStream:对象的反序列化流

    package com.itheima.demo04.ObjectStream; import java.io.FileOutputStream; import java.io.IOException ...

  3. Java IO(十二) 字符流 Writer 和 Reader

    Java IO(十二) 字符流 Reader和 Writer 一.介绍 涉及到文件(如果是纯文本文件形式)操作时,Java除了提供 FIle(文件和目录路径名的抽象表示形式) 和 FileDescri ...

  4. java.io.Serializable 序列化问题

    java.io.Serializable 序列化问题 Person.java package a.b.c; public class Person implements java.io.Seriali ...

  5. java.io.Serializable 序列化问题【原】

    java.io.Serializable 序列化问题 Person.java package a.b.c; public class Person implements java.io.Seriali ...

  6. java IO(六):额外功能处理流

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  7. Java IO详解(五)------包装流

    File 类的介绍:http://www.cnblogs.com/ysocean/p/6851878.html Java IO 流的分类介绍:http://www.cnblogs.com/ysocea ...

  8. java IO(五):字节流、字符流的选择规律

    */ .hljs { display: block; overflow-x: auto; padding: 0.5em; color: #333; background: #f8f8f8; } .hl ...

  9. 系统学习 Java IO (十二)----数据流和对象流

    目录:系统学习 Java IO---- 目录,概览 DataInputStream/DataOutputStream 允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型. 要想使用 ...

  10. Java Io 对象序列化和反序列化

    Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输. 1.      对象序列化就是将对象转换成字节序列,反之叫对象的反序列化 2.      序列化流ObjectOut ...

随机推荐

  1. postgresql----表分区

    --下面的描述不记得在哪里抄来的了?! 表分区就是把逻辑上一个大表分割成物理上的多个小块,表分区可提供如下若干好处: 1.某些类型的查询性能可以得到极大提升. 2.更新的性能可以得到提升,因为表的每块 ...

  2. js常用的几个验证

    /// <summary> ///1. 使用正则表达式验证 参数 是否 为数值 /// </summary> /// <param name="trNumber ...

  3. 在唯一密钥属性“fileExtension”设置为“.log”时,无法添加类型为“mimeMap”的重复集合项

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAkoAAAFfCAIAAAA+snR7AAAgAElEQVR4nOzdZ1xT18PAcf+1VpZaW6

  4. spring boot实战(第一篇)第一个案例

    版权声明:本文为博主原创文章,未经博主允许不得转载.   目录(?)[+]   spring boot实战(第一篇)第一个案例 前言 写在前面的话 一直想将spring boot相关内容写成一个系列的 ...

  5. Scanline Fill Algorithm

    https://www.sccs.swarthmore.edu/users/02/jill/graphics/hw3/hw3.html http://web.cs.ucdavis.edu/~ma/EC ...

  6. Caocao's Bridges---hdu4738(桥)

    http://acm.hdu.edu.cn/showproblem.php?pid=4738 题就是求出所有的桥,然后输出桥的权值的最小值. 如果一开始是不连通的,输出0. 图有重边,需要处理, 不能 ...

  7. Python开发【模块】:M2Crypto RSA加密、解密

    M2Crypto 模块 快速安装: # 环境centos7.0,提前装好openssl(自行百度安装),windows装不上,暂不考虑了 [root@localhost ~]# pip install ...

  8. day10(java web之request&respone&访问路径&编码问题)

    day10 请求响应流程图 response response概述 response是Servlet.service方法的一个参数,类型为javax.servlet.http.HttpServletR ...

  9. centos LAMP第三部分php,mysql配置 php配置文件 配置php的error_log 配置php的open_basedir 安装php的扩展模块 phpize mysql配置第二十一节课

    centos   LAMP第三部分php,mysql配置 php配置文件   配置php的error_log  配置php的open_basedir 安装php的扩展模块 phpize  mysql配 ...

  10. Java-idea-FindBugs、PMD和CheckStyle对比

    一.对比 工具 目的 检查项 备注 FindBugs 检查.class 基于Bug Patterns概念,查找javabytecode (.class文件)中的潜在bug 主要检查bytecode中的 ...