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. public Student() {
  11. super();
  12. }
  13. public Student(int id, String name, char sex) {
  14. super();
  15. this.id = id;
  16. this.name = name;
  17. this.sex = sex;
  18. }
  19. public int getId() {
  20. return id;
  21. }
  22. public void setId(int id) {
  23. this.id = id;
  24. }
  25. public String getName() {
  26. return name;
  27. }
  28. public void setName(String name) {
  29. this.name = name;
  30. }
  31. public char getSex() {
  32. return sex;
  33. }
  34. public void setSex(char sex) {
  35. this.sex = sex;
  36. }
  37.  
  38. public String show() {
  39. return "Student [id=" + id + ", name=" + name + ", sex=" + sex + "]";
  40. }
  41.  
  42. }

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. }

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

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

  1. java ->IO流_序列化流与反序列化流

    序列化流与反序列化流 用于从流中读取对象的操作流 ObjectInputStream    称为 反序列化流 用于向流中写入对象的操作流 ObjectOutputStream   称为 序列化流(对象 ...

  2. Java IO(Properties/对象序列化/打印流/commons-io)

    Java IO(Properties/对象序列化/打印流/commons-io) Properties Properties 类表示了一个持久的属性集.Properties 可保存在流中或从流中加载. ...

  3. IO流的序列化和反序列化

    序列化和反序列化的概念: 序列化:把对象转换为字节序列的过程称为对象的序列化.(常见的就是存文件) 反序列化:把字节序列恢复为对象的过程称为对象阿德反序列化. 序列化和反序列化的使用: java.io ...

  4. java IO流详解

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  5. Java IO流题库

    一.    填空题 Java IO流可以分为   节点流   和处理流两大类,其中前者处于IO操作的第一线,所有操作必须通过他们进行. 输入流的唯一目的是提供通往数据的通道,程序可以通过这个通道读取数 ...

  6. Java IO流详尽解析

    流的概念和作用 学习Java IO,不得不提到的就是JavaIO流. 流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象.即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输 ...

  7. 【Java基础】Java IO流的总结

    Java IO流分为输入流和输出流,而输入流和输出流中又分字符流和字节流.顾名思义,输入流则是输入到程序中计算,输出流是把程序的结果输出到文件或者设备.而字符流输入输出以字符为单位,字节流则是以字节为 ...

  8. Java IO流学习总结(2)

    写在前面:本文章基本覆盖了java IO的全部内容,java新IO没有涉及,因为我想和这个分开,以突出那个的重要性,新IO哪一篇文章还没有开始写,估计很快就能和大家见面.照旧,文章 依旧以例子为主,因 ...

  9. Java IO 流总结篇

    1. 写在前面的话 I/O ,I 是 Input (输入)的缩写,O是Output (输出) 的缩写,众所周知,人与人之间想要沟通交流,就需要讲彼此都能听懂的语言,比如大家都统一说英语. 人类如果想和 ...

随机推荐

  1. 忘记用了delete释放内存,如何防止内存溢出

    C++的内存管理还是要自己来做的,自己要进行内存的申请和释放 程序直接kill掉,OS会回收的 但是面试要问到这个问题,其实是想问你别的 RAII,也称为“资源获取就是初始化”,是c++等编程语言常用 ...

  2. Django创建对象的create和save方法

    Django的模型(Model)的本质是类,并不是一个具体的对象(Object).当你设计好模型后,你就可以对Model进行实例化从而创建一个一个具体的对象.Django对于创建对象提供了2种不同的s ...

  3. PHP协程:并发 shell_exec

    在PHP程序中经常需要用shell_exec执行一些命令,而普通的shell_exec是阻塞的,如果命令执行时间过长,那可能会导致进程完全卡住.在Swoole4协程环境下可以用Co::exec并发地执 ...

  4. NOIP模拟 7.04

    魔术球问题弱化版(ball.c/.cpp/.pas) [题目描述] 假设有 n 根柱子,现要按下述规则在这 n 根柱子中依次放入编号为 1,2,3,…的球. (1)每次只能在某根柱子的最上面放球. ( ...

  5. 如何解决IntelliJ在打包Maven项目时不打包配置文件

    在pom文件中加上你的配置文件夹目录: <build> <resources> <resource> <directory>src/res</di ...

  6. 用JS实线放大镜的效果

    今天花了点时间,复习了下使用原生JS实线放大镜的效果.在制作过程中,也是很到了一些问题,在这里总结下. HTML代码如下: <div id="preview"> < ...

  7. 异步操作async await

    async函数的特点: 语义化强 里面的await只能在async函数中使用 await后面的语句可以是promise对象.数字.字符串等 async函数返回的是一个Promsie对象 await语句 ...

  8. 操作系统之LRU算法 C语言链表实现

    LRU是Least Recently Used的缩写,即最近最少使用,是一种常用的页面置换算法,选择最近最久未使用的页面予以淘汰.该算法赋予每个页面一个访问字段,用来记录一个页面自上次被访问以来所经历 ...

  9. day39-Spring 19-今天的内容总结

  10. cmakelists.txt中配置openg环境出现: undefined reference to symbol 'glLightfv'

    cmakelists.txt中配置openg环境出现: undefined reference to symbol 'glLightfv' 解决方法: 在cmakelists.txt添加 find_p ...