`
bingzhen66
  • 浏览: 37048 次
文章分类
社区版块
存档分类
最新评论

52.IO流-对象的序列化

 
阅读更多

------- android培训java培训、期待与您交流! ----------

一、概念

  • 将堆中的对象保存到介质(如硬盘)中叫对象持久化或序列化。静态区的不行。
  • 操作对象:
    • ObjectInputStream
    • ObjectOutputStream
    • 被操作的对象需要实现Serializable(标记接口:没方法的接口)。
二、对象
  • ObjectOutStream

    • ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream。可以使用 ObjectInputStream 读取(重构)对象。通过在流中使用文件可以实现对象的持久存储。如果流是网络套接字流,则可以在另一台主机上或另一个进程中重构对象。
  • ObjectInputStream
    • ObjectInputStream 对以前使用 ObjectOutputStream 写入的基本数据和对象进行反序列化。
三、代码
  • /*
    对象的序列化:
    ObjectOutputStream把源(如内存)中的对象序列化到目的(如硬盘)上,
    ObjectInputStream把源(如硬盘)中的序列化对象读取到目的(如内存)中。
    
    ObjectOutputStream序列化时,会给这个对象加一个序列化UID,
    当ObjectInputStream 方法readObject();会匹配这个类的UID和序列化UID,
    
    transient 关键字可以保证成员不被序列化。
    
    */
    import java.io.*;
    class  ObjectStreamDemo
    {
    	public static void main(String[] args) throws Exception
    	{
    		//writeObj();
    		readObj();
    	}
    
    	public static void readObj() throws Exception
    	{
    		ObjectInputStream ois = new ObjectInputStream(new FileInputStream("obj.txt"));
    		
    		Person p = (Person) ois .readObject();
    
    		System.out.println(p);
    		ois.close();
    
    
    	}
    	public static void writeObj() throws Exception
    	{
    		ObjectOutputStream oos = 
    			new ObjectOutputStream(new FileOutputStream("obj.txt"));
    
    		oos.writeObject(new Person("lisi0",399));
    		oos.close();
    	}
    }
    

  • 注意16行,
    • 一是会报类型不匹配异常,因为文件中的序列号对象不一定是定义的对象。
    • 二是person对象成员代码改变的时候,编译时本地类会与流中的类进行比较,序列化号会不同导致InvalibClassException编译不通过。因为序列号是根据成员获取出的。
    • 怎么解决改成员改变还可以使用,可以自己定义UID,
  • 注意:静态是不能被序列化的。
  • 注意:transient修饰的成员不能被序列号。
  • 如果ObjectOutStreamWrite了多个对象,那么 ObjectInputStream的read会依次读出。
分享到:
评论

相关推荐

    54-IO流(对象的序列化).avi

    54-IO流(对象的序列化).avi

    java-Hadoop序列化

     序列化(Serialization)是指把结构化对象转化为字节流。  反序列化(Deserialization)是序列化的逆过程。即把字节流转回结构化对象。  Java序列化(java.io.Serializable)  Hadoop序列化的特点  ...

    Java高级程序设计实战教程第五章-Java序列化机制.pptx

    对象序列化是Java编程中的必备武器 Java高级程序设计实战教程第五章-Java序列化机制全文共15页,当前为第4页。 5.2.2 序列化应用 当你想把内存中的对象状态保存到一个文件中或者数据库中时候; 当你想用套接字在...

    介绍Java对象序列化使用基础

    序列化的过程就是对象写入字节流和从字节流中读取对象。...对象序列化功能非常简单、强大,在RMI、Socket、JMS、EJB都有应用。对象序列化问题在网络编程中并不是最激动人心的课题,但却相当重要,具有许多实用意义。

    C++STL程序员开发指南【可搜索+可编辑】

    1-1-7 指针声明类型与对象类型相一致.................................. 13 1-1-8 int 与char 不再等价............................................. 13 1-1-9 结构数据类型的变化.................................

    Java IO流对象的序列化和反序列化实例详解

    主要介绍了Java IO流对象的序列化和反序列化实例详解的相关资料,需要的朋友可以参考下

    java IO数据操作流、对象序列化、压缩流代码解析

    主要介绍了java IO数据操作流、对象序列化、压缩流代码解析,具有一定借鉴价值,需要的朋友可以参考下

    Java基础知识点.html

    类加载器 ClassLoader 反射 Stream 流 函数式编程 Lambda 表达式 网络编程-协议 网络编程-端口 网络编程-IP 多线程 IO流-字节流 IO流-字符流 IO流-转换流 File Map HashMap 序列化和反序列化 可变参数 类型通配符 ...

    java中的IO操作总结(四)

    实例1:对象的序列化 ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 import java.io.File; import java....

    Java工程师必备面试题【多线程、反射、类加载器、JVM、泛型、异常处理、注解、面向对象编程、集合、IO流、序列化】

    内容概要:以上列出的Java面试题涵盖了Java语言的基础知识、面向对象编程、集合、IO流、多线程、反射、类加载器、JVM、序列化、泛型、异常处理、注解等多个方面。 适用人群:以上Java面试题适用于准备Java开发...

    JAVA基础,常见java基础问题.rar

    反序列化就是序列化的逆过程,把磁盘文件中或网络节点的二进制数据恢复成java对象的过程,通常是将二进制数据转换为对象。 序列化的应用场景:将对象存储在文件或数据库中,利用套接字在网络上进行对象传输,RMI...

    Java的IO流讲解代码: File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型

    File 类、RandomAccessFile 类、字节流(文件字节流、缓冲字节流、基本数据类型字节流、打印流、对象序列化流、字节数组流)、字符流(缓冲字符流、文件字符流、转换流、格式化输出流、字符数组流) 这份代码源码...

    day10【缓冲流、转换流、序列化流、打印流】-笔记1

    第一章 缓冲流昨天学习了基本的一些流,作为IO流的入门,今天我们要见识一些更强大的流。比如能够高效读写的缓冲流,能够转换编码的转换流,能够持久化存储对象的序列化

    java小项目练习IO实现

    IO实现本地序列化和反序列化,面向对象,集合等

    java序列化和反序列化,面试必备

    序列化:将对象写入IO流中; 反序列化:从IO流中恢复对象; 意义:序列化机制允许将实现序列化的Java对象转换为字节序列,并将字节序列保存在磁盘中,或通过网络传输,以达到以后恢复成原来的对象。序列化机制使地...

    day019-io笔记和代码.rar

    对象序列化和反序列化生成一个 2. 流的种类: io包下 扩展nio包下 1. IO分类: 输入流 输出流 字节流 InputStream(抽象类) OutputStream(抽象类) 字符流 Reader (抽象类) ...

    IO包的所有内容

    1.掌握文件类(File类)的使用 2.IO输入/输出流的概念3.IO的分类4.掌握IO包中的流的基本应用5.了解字符编码问题6.掌握对象序列化(串行化)

    单点登录源码

    Protobuf & json | 数据序列化 | [https://github.com/google/protobuf](https://github.com/google/protobuf) Jenkins | 持续集成工具 | [https://jenkins.io/index.html](https://jenkins.io/index.html) Maven | ...

    io-demo:学习IO

    io-demo I / O in or out code 编码 file 学习 java.io.File 类 random-access-file 学习 RandomAccessFile i-o io流 包括file流,字节流 serialize-demo 深入学习 对象序列化与反序列化

    Java面试资料之IO相关

    本文将从流的分类、流的转换、对象序列化、字节流和字符流的区别、对象克隆等方面对 Java IO 进行总结。 1. 流的分类 Java 中有两种类型的流:输入流(inputStream)和输出流(outputStream)。输入流用于从外部...

Global site tag (gtag.js) - Google Analytics