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 (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...
随机推荐
- 忘记用了delete释放内存,如何防止内存溢出
C++的内存管理还是要自己来做的,自己要进行内存的申请和释放 程序直接kill掉,OS会回收的 但是面试要问到这个问题,其实是想问你别的 RAII,也称为“资源获取就是初始化”,是c++等编程语言常用 ...
- Django创建对象的create和save方法
Django的模型(Model)的本质是类,并不是一个具体的对象(Object).当你设计好模型后,你就可以对Model进行实例化从而创建一个一个具体的对象.Django对于创建对象提供了2种不同的s ...
- PHP协程:并发 shell_exec
在PHP程序中经常需要用shell_exec执行一些命令,而普通的shell_exec是阻塞的,如果命令执行时间过长,那可能会导致进程完全卡住.在Swoole4协程环境下可以用Co::exec并发地执 ...
- NOIP模拟 7.04
魔术球问题弱化版(ball.c/.cpp/.pas) [题目描述] 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球. (1)每次只能在某根柱子的最上面放球. ( ...
- 如何解决IntelliJ在打包Maven项目时不打包配置文件
在pom文件中加上你的配置文件夹目录: <build> <resources> <resource> <directory>src/res</di ...
- 用JS实线放大镜的效果
今天花了点时间,复习了下使用原生JS实线放大镜的效果.在制作过程中,也是很到了一些问题,在这里总结下. HTML代码如下: <div id="preview"> < ...
- 异步操作async await
async函数的特点: 语义化强 里面的await只能在async函数中使用 await后面的语句可以是promise对象.数字.字符串等 async函数返回的是一个Promsie对象 await语句 ...
- 操作系统之LRU算法 C语言链表实现
LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历 ...
- day39-Spring 19-今天的内容总结
- cmakelists.txt中配置openg环境出现: undefined reference to symbol 'glLightfv'
cmakelists.txt中配置openg环境出现: undefined reference to symbol 'glLightfv' 解决方法: 在cmakelists.txt添加 find_p ...