java io流与序列化反序列化

java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。

序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。在序列化期间,对象将其当前状态写入到临时或持久性存储区。以后,可以通过从存储区中读取或反序列化对象的状态,重新创建该对象。

下面是一个实例,通过例子来将以上来简化学习:

1.先创建一个学生类来实现serialization:

 1 package com.etc;
 2
 3 import java.io.Serializable;
 4
 5 public class Student implements Serializable{
 6     private int id;
 7     private String name;
 8     private char sex;
 9
10
11     public Student() {
12         super();
13     }
14     public Student(int id, String name, char sex) {
15         super();
16         this.id = id;
17         this.name = name;
18         this.sex = sex;
19     }
20     public int getId() {
21         return id;
22     }
23     public void setId(int id) {
24         this.id = id;
25     }
26     public String getName() {
27         return name;
28     }
29     public void setName(String name) {
30         this.name = name;
31     }
32     public char getSex() {
33         return sex;
34     }
35     public void setSex(char sex) {
36         this.sex = sex;
37     }
38
39     public String show() {
40         return "Student [id=" + id + ", name=" + name + ", sex=" + sex + "]";
41     }
42
43
44 }

2.通过控制台将建立的学生对象保存到集合中,序列化集合写到文件中,在读文件反序列化集合,将学生对象添加到学生集合中,遍历集合

 1 package com.etc;
 2
 3 import java.io.BufferedReader;
 4 import java.io.File;
 5 import java.io.FileOutputStream;
 6 import java.io.IOException;
 7 import java.io.InputStreamReader;
 8 import java.io.ObjectOutputStream;
 9 import java.util.ArrayList;
10 import java.util.List;
11
12 public class 序列化学生集合 {
13     public static void main(String[] args) throws IOException {
14         //创建集合添加学生
15         List<Student> list=new ArrayList<>();
16         //创建控制台输入流,将文件保存到src/student.dat下
17         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("src/student.dat")));
18         BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
19         //获取控制台信息
20         System.out.println("如果录入信息请输入‘y’,否则输入‘n’");
21         String str = br.readLine();
22         boolean flag = true;
23         //循环判断是否继续输入信息
24         while (flag) {
25             Student s = new Student();//实例化一个学生对象
26             //获取各个信息
27             System.out.println("请输入学号");
28             String str1 = br.readLine();
29             System.out.println("请输入姓名");
30             String str2 = br.readLine();
31             System.out.println("请输入性别");
32             String str3 = br.readLine();
33             //将值传入到学生对象中
34             s.setId(Integer.parseInt(str1));
35             s.setName(str2);
36             s.setSex(str3.charAt(0));
37             list.add(s);//添加学生到集合中
38             System.out.println("如果录入信息请输入‘y’,否则输入‘n’");
39             String str8 = br.readLine();
40             //判断是否继续录入
41             if (str8.equals("y")) {
42                 flag = true;
43             } else {
44                 flag = false;
45                 System.out.println("录入结束");
46             }
47         }
48
49         for (Student student : list) {
50             System.out.println(student.show());
51         }
52         oos.writeObject(list);//将信息写入文件中
53         oos.close();
54     }
55 }

3.反序列化

 1 package com.etc;
 2
 3 import java.io.File;
 4 import java.io.FileInputStream;
 5 import java.io.FileNotFoundException;
 6 import java.io.IOException;
 7 import java.io.InputStream;
 8 import java.io.InputStreamReader;
 9 import java.io.ObjectInputStream;
10 import java.util.ArrayList;
11 import java.util.List;
12
13 public class 反序列化 {
14     public static void main(String[] args) throws IOException, ClassNotFoundException {
15         //创建反序列化集合
16         List<Student> arrayList=new ArrayList<>();
17         //读文件
18         ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("src/student.dat")));
19         //创建集合保存反序列化学生对象
20         ArrayList List=(ArrayList) ois.readObject();
21
22         //遍历反序列化集合添加到学生集合中
23         for (Object object : List) {
24             arrayList.add((Student) object);
25         }
26         //遍历学生集合
27         for (Student student : arrayList) {
28             System.out.println(student.show());
29         }
30
31     }
32 }

反序列化时,一定要想清楚对方传给自己的是什么信息,例如传来的集合,就新建集合,来将反序列化信息来保存,再通过集合的类型,来将传过来的信息进行重组添加到集合中,最后遍历集合。

原文地址:https://www.cnblogs.com/LiuOOP/p/10992344.html

时间: 2024-08-01 23:24:03

java io流与序列化反序列化的相关文章

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

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

动车上的书摘-java对象流与序列化

动车上的书摘-java对象流与序列化 摘要: 摘要: 原创出处: http://www.cnblogs.com/Alandre/ 泥沙砖瓦浆木匠 希望转载,保留摘要,谢谢! 钢笔不限贵便宜,书法是来自心对手的交流.-泥沙砖瓦浆木匠 一.对象序列化 当需要存储相同类型的数据,选择固定的长度记录是好选择.但是在面向对象(OOP)程序中,对象之间很少有全部相同的类型.所以,java语言支持一种称为对象序列化(object serialization)的机制. 下面展示一个序列化例子,关于两个对象 Em

Java IO流详尽解析(转自 http://www.2cto.com/kf/201312/262036.html)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流详尽解析(大神之作)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流详尽解析

流的概念和作用 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流.根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别: 读写单位不同:字节流以字节(8bit)为单位,字符

Java IO流详尽解析(转)

流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据操作. IO流的分类 根据处理数据类型的不同分为:字符流和字节流 根据数据流向不同分为:输入流和输出流 字符流和字节流 字符流的由来: 因为数据编码的不同,而有了对字符进行高效操作的流对象.本质其实就是基于字节流读取时,去查了指定的码表.字节流和字符流的区别

Java IO流(二)

目录 Java IO流(二) 7. 字节缓冲流 7.1 概述 7.2 BufferedOutputStream类 7.3 BufferedInputStream类 8. 文件复制练习(增强版 使用缓冲流) 9. 字符缓冲流 9.1 BufferedWriter类 9.2 BufferedReader类 10. 练习:文本排序 11. 转换流 11.1 字符编码和字符集 11.2 编码引出的问题 11.3 转换流的原理 11.4 OutputStreamWriter类 11.5 InputStre

Java IO流技术

Java IO流技术 Java IO基本总结 Java的IO技术就是用来处理数据的.比如从文件中读取数据,或者将数据写到文件中.在网络中传输的都是二进制,即字节码,我们需要在传输之前,将我们程序中的数据转换成字节码才能进行传输.Java的IO包内就提供了完成这些工作的工具类. 总的来说:当需要以二进制的形式来处理文件时,即不涉及文本内容的操作时,我们可以选择InputStream和OutputStream来完成我们的工作.当需要完成处理字符串相关的工作时,就需要使用Reader和Writer来完

黑马程序员-Java IO流

--Java培训.Android培训.iOS培训..Net培训.期待与您交流!-- 一.概述 Java中与IO相关的类有很多,都集中在java.io中,都是以流的形式操作的,流是有一定的顺序,像一个管道一样,它的本质是传输数据.根据数据类型的不同可以分为字节流和字符流,根据流向的不同可以分为输入流和输出流. 字符流:因为数据有不同的编码,可以对字符进行不同的操作,其本质还是基于字节流,然后再查询相应的码表.一般用于处理纯文本数据. 字节流:可以处理所有类型数据,二进制文件(图片,音频等). 输入