Java 之 序列化流

一、序列化概述

  Java 提供了一种对象 序列化 的机制。用一个字节序列可以表示一个对象,该字节序列包含该 对象的数据 、 对象的类型 和 对象中存储的属性 等信息。字节序列写出到文件之后,相当于文件中 持久保存 了一个对象的信息。

  反之,该字节序列还可以从文件中读取回来,重构对象,对它进行反序列化。 对象的数据 、 对象的类型 和 对象中存储的数据 信息,都可以用来在内存中创建对象。

  图解序列化

二、ObjectOutputStream 类

三、ObjectInputStream 类

四、案例:序列化集合

  题目:将存有多个自定义对象的集合序列化操作,保存到 list.txt 文件中 ,反序列化 list.txt ,并遍历集合,打印对象信息。

  代码实现

 1 /*
 2     分析:
 3         1.定义一个存储Person对象的ArrayList集合
 4         2.往ArrayList集合中存储Person对象
 5         3.创建一个序列化流ObjectOutputStream对象
 6         4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
 7         5.创建一个反序列化ObjectInputStream对象
 8         6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合
 9         7.把Object类型的集合转换为ArrayList类型
10         8.遍历ArrayList集合
11         9.释放资源
12  */
13 public static void main(String[] args) throws IOException, ClassNotFoundException {
14         //1.定义一个存储Person对象的ArrayList集合
15         ArrayList<Person> list = new ArrayList<>();
16         //2.往ArrayList集合中存储Person对象
17         list.add(new Person("张三",18));
18         list.add(new Person("李四",19));
19         list.add(new Person("王五",20));
20         //3.创建一个序列化流ObjectOutputStream对象
21         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("E:\\list.txt"));
22         //4.使用ObjectOutputStream对象中的方法writeObject,对集合进行序列化
23         oos.writeObject(list);
24         //5.创建一个反序列化ObjectInputStream对象
25         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("E:\\list.txt"));
26         //6.使用ObjectInputStream对象中的方法readObject读取文件中保存的集合
27         Object o = ois.readObject();
28         //7.把Object类型的集合转换为ArrayList类型
29         ArrayList<Person> list2 = (ArrayList<Person>)o;
30         //8.遍历ArrayList集合
31         for (Person p : list2) {
32             System.out.println(p);
33         }
34         //9.释放资源
35         ois.close();
36         oos.close();
37     }

原文地址:https://www.cnblogs.com/niujifei/p/11498638.html

时间: 2024-10-10 23:26:56

Java 之 序列化流的相关文章

Java对象序列化剖析

对象序列化的目的 1)希望将Java对象持久化在文件中 2)将Java对象用于网络传输 实现方式 如果希望一个类的对象可以被序列化/反序列化,那该类必须实现java.io.Serializable接口或java.io.Externalizable接口,前者为一个标记接口,即不存在任何需要实现的方法,仅仅为一种对象可序列化的标识,且序列化和反序列化的方式为系统默认方式:而后者其实内部也实现了Serializable,并且包含两个方法writeExternal()和readExternal()分别用

Java API —— IO流(数据操作流 &amp; 内存操作流 &amp; 打印流 &amp; 标准输入输出流 &amp; 随机访问流 &amp; 合并流 &amp; 序列化流 &amp; Properties &amp; NIO)

1.操作基本数据类型的流 1) 操作基本数据类型 · DataInputStream:数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型.应用程序可以使用数据输出流写入稍后由数据输入流读取的数据. · DataOutputStream:数据输出流允许应用程序以适当方式将基本 Java 数据类型写入输出流中.然后,应用程序可以使用数据输入流将数据读入. package datastreamdemos; import java.io.*; /** * Created b

Java基础知识强化之IO流笔记65:序列化流 和 反序列化流

1. 什么是 序列化 和 反序列化 ?     序列化 (Serialization):将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象.一般的格式是与平台无关的二进制流,可以将这种二进制流持久保存在磁盘上,也可以通过网络将这种二进制流传输到另一个网络结点.  反序列化(Anti Serialization ):是指把这种二进制流数据还原成对象. 2. 序列化流 和 反序列化

java中的序列化流和反序列化流

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 16.0px SimSun; color: #4e9072 } 序列化流:把对象按照流一样的方式存入文本文件或者在网络中传输.  对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象.流数据 -- 对象(ObjectInputStream) 序列化流和反序列化流不同于字节流 字符流 内存字节流,这些都是把字符串写入/读取文件,序列

Java IO流-序列化流和反序列化流

2017-11-05 20:42:06 序列化流:把对象按照流的方式存入文本文件或者在网络中传输. 对象 -- 流数据(ObjectOutputStream) 反序列化流:把文本文件中的流对象数据或者网络中的流对象数据还原成对象. 流数据 -- 对象(ObjectInputStream) ObjectOutputStream ObjectOutputStream:ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectIn

java 打印流 递归复制子文件子文件夹 不同编码文件复制到同一文件中 序列化流反序列化流

package com.swift.jinjie; import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.PrintStream; /*从键盘输入一个文件夹路径,利用打印流将该文件夹下的所有文件(包括子文件夹)复制到D盘下temp文件夹下.*/ public class PrintAllT

java -&gt;IO流_序列化流与反序列化流

序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流(对象保存到文件中) l  特点:用于操作对象.可以将对象写入到文件中,也可以从文件中读取对象. 对象序列化流ObjectOutputStream ObjectOutputStream 将 Java 对象的基本数据类型和图形写入 OutputStream.可以使用 ObjectInputStream 读取

Java基础IO流(四)序列化与反序列化

对象的序列化与反序列化: 对象的序列化,就是将Object转换成byte序列,反之叫对象的反序列化. 序列化流(ObjectOutInputStream),是过滤流 -------writeObject 反序列化流(ObjectInputStream)-----raedObject 序列化接口(Serializable) 对象必须实现序列化接口,才能进行序列化,否则出现异常 这个接口,没有任何方法,只是一个标准. 案例描述:Student,将它序列化到文件中,再反序列化读出. Student类:

java对象序列化小结

百度百科上介绍序列化是这样的: 序列化 (Serialization): 将对象的状态信息转换为可以存储或传输的形式的过程.在序列化期间,对象将其当前状态写入到临时或持久性存储区.以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象. 序列化使其他代码可以查看或修改那些不序列化便无法访问的对象实例数据.确切地说,代码执行序列化需要特殊的权限:即指定了 SerializationFormatter 标志的 SecurityPermission.在默认策略下,通过 Internet 下载