java io流与序列化反序列化
java的io是实现输入和输出的基础,可以方便的实现数据的输入和输出操作。

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

1.先创建一个学生类来实现serialization:
package com.etc;
import java.io.Serializable;
public class Student implements Serializable{
private int id;
private String name;
private char sex;
public Student() {
super();
}
public Student(int id, String name, char sex) {
super();
this.id = id;
this.name = name;
this.sex = sex;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
public String show() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex + "]";
}
}
2.通过控制台将建立的学生对象保存到集合中,序列化集合写到文件中,在读文件反序列化集合,将学生对象添加到学生集合中,遍历集合
package com.etc; import java.io.BufferedReader;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.List; public class 序列化学生集合 {
public static void main(String[] args) throws IOException {
//创建集合添加学生
List<Student> list=new ArrayList<>();
//创建控制台输入流,将文件保存到src/student.dat下
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(new File("src/student.dat")));
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
//获取控制台信息
System.out.println("如果录入信息请输入‘y’,否则输入‘n’");
String str = br.readLine();
boolean flag = true;
//循环判断是否继续输入信息
while (flag) {
Student s = new Student();//实例化一个学生对象
//获取各个信息
System.out.println("请输入学号");
String str1 = br.readLine();
System.out.println("请输入姓名");
String str2 = br.readLine();
System.out.println("请输入性别");
String str3 = br.readLine();
//将值传入到学生对象中
s.setId(Integer.parseInt(str1));
s.setName(str2);
s.setSex(str3.charAt(0));
list.add(s);//添加学生到集合中
System.out.println("如果录入信息请输入‘y’,否则输入‘n’");
String str8 = br.readLine();
//判断是否继续录入
if (str8.equals("y")) {
flag = true;
} else {
flag = false;
System.out.println("录入结束");
}
} for (Student student : list) {
System.out.println(student.show());
}
oos.writeObject(list);//将信息写入文件中
oos.close();
}
}
3.反序列化
package com.etc; import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.ObjectInputStream;
import java.util.ArrayList;
import java.util.List; public class 反序列化 {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//创建反序列化集合
List<Student> arrayList=new ArrayList<>();
//读文件
ObjectInputStream ois=new ObjectInputStream(new FileInputStream(new File("src/student.dat")));
//创建集合保存反序列化学生对象
ArrayList List=(ArrayList) ois.readObject(); //遍历反序列化集合添加到学生集合中
for (Object object : List) {
arrayList.add((Student) object);
}
//遍历学生集合
for (Student student : arrayList) {
System.out.println(student.show());
} }
}
反序列化时,一定要想清楚对方传给自己的是什么信息,例如传来的集合,就新建集合,来将反序列化信息来保存,再通过集合的类型,来将传过来的信息进行重组添加到集合中,最后遍历集合。
java io流与序列化反序列化的更多相关文章
- java ->IO流_序列化流与反序列化流
序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream 称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream 称为 序列化流(对象 ...
- Java IO(Properties/对象序列化/打印流/commons-io)
Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...
- IO流的序列化和反序列化
序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...
- java IO流详解
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- Java IO流题库
一. 填空题 Java IO流可以分为 节点流 和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...
- Java IO流详尽解析
流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...
- 【Java基础】Java IO流的总结
Java IO流分为输入流和输出流,而输入流和输出流中又分字符流和字节流.顾名思义,输入流则是输入到程序中计算,输出流是把程序的结果输出到文件或者设备.而字符流输入输出以字符为单位,字节流则是以字节为 ...
- Java IO流学习总结(2)
写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面.照旧,文章 依旧以例子为主,因 ...
- Java IO 流总结篇
1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...
随机推荐
- vue移动端项目
用vue mint-ui jquery-weui写了一个移动端demo 技术栈 vue2.0 vue-router axios mint-ui jquery-weui webpack 页面截图 最后 ...
- Directx教程(24) 简单的光照模型(3)
原文:Directx教程(24) 简单的光照模型(3) 在工程myTutorialD3D11_17中,我们重新定义我们的cube顶点法向,每个三角形面的顶点法向都是和这个三角形的面法向是一致 ...
- 关于serialize() FormData serializeArray()表单序列化
serialize() FormData serializeArray()都是序列化表单,实现表单的异步提交 但是serialize()和serializeArray()都是只能序列化表单中的数据 ...
- Java程序中如何使用事物
在java操作数据库是,为了保证数据的一致性,比如转账操作,从一个账户减掉10元,在另一个账户加上10元. 在类中定义的成员属性(变量)不用赋初值,但在函数里头定义的变量就一定要赋初值. packag ...
- More Effective C++: 03异常
C++的异常机制使得程序付出某些代价:资源泄漏的可能性增加了:写出具有你希望的行为的构造函数与析构函数变得更加困难:执行程序和库程序尺寸增加了,同时运行速度降低了等等. 但是为什么使用异常呢?C程序使 ...
- firefox扩展开发(二):用XUL创建窗口控件
firefox扩展开发(二):用XUL创建窗口控件 2008-06-11 16:57 1.创建一个简单的窗口 <?xml version="1.0"?> <?xm ...
- 人生苦短,LET'S GO! GO语言目录
1.Golang开山篇,GO就是NB! 1-1.go开发工具安装 2.go-人生第一个go程序和基本语法 3.go-流程控制 4.go-函数 5.go-流程控制 6.go-复合类型 7.go-面向对象 ...
- vue中$bus的传参的坑
今天在做项目的时候碰见一个坑就是B页面有个点击事件需要触发完然后跳转到A页面,接着页面跳转过去后再A页面的create生命周期中利用on监听事件的改变,接着赋值给data里面某个数据,但是奇怪的问题是 ...
- day10-02_多线程之进程与线程的pid
一.多个线程之间PID的区别 主进程跟线程的pid是一样的 from threading import Thread from multiprocessing import Process impor ...
- sum(),max(),avg(),RATIO_TO_REPORT()--分组统计
select id,area, sum(1) over() as 总记录数, sum(1) over(partition by id) as 分组记录数, sum(score) over() as 总 ...