io流之序列化与反序列化流

package com.Lucky.io.serializeOrUnserialize;

import java.io.*;
import java.util.ArrayList;
import java.util.Collections;

/*

序列化流: 将java对象写到本地文件中【应用场景:游戏存档……………………】
反序列化流: 读取本地文件中java对象
*/

/**
* 注意点: 要序列化多个对象时,要将对象放到集合中,直接序列化集合即可
* 方便在反序列化时读取数据出现EOFException异常【结尾异常】
*/
public class serializeDemo {
public static void main(String[] args) throws IOException {
//创建序列化流【对象操作输出流】
ObjectOutputStream outputStream=
new ObjectOutputStream(
new FileOutputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\serializeOrUnserialize\\ObjectTest.txt"));


//创建要储存的对象
student stu=new student("唯易",22);
student stu1=new student("one",22);
student stu2=new student("two",22);
student stu3=new student("three",22);
student stu4=new student("four",22);

//将对象储存到集合中
ArrayList<student> unit=new ArrayList<>();
Collections.addAll(unit,stu,stu1,stu2,stu3,stu4);


outputStream.writeObject(unit);

//关闭流
outputStream.close();

}
}

  

package com.Lucky.io.serializeOrUnserialize;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.ArrayList;

public class unSerializeDemo {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//////////////////////////////反序列化///////////////////////////////////////////////////
ObjectInputStream oiStream=
new ObjectInputStream(
new FileInputStream("H:\\项目\\javaSE\\IO\\src\\com\\Lucky\\io\\serializeOrUnserialize\\ObjectTest.txt"));


ArrayList<student> val= (ArrayList<student>)oiStream.readObject();


//遍历集合【获取每一个对象】
for (student student : val) {
System.out.println(student);
}

oiStream.close();
}
}

  

材料:

复制代码
 1 package com.Lucky.io.serializeOrUnserialize;
 2 
 3 import java.io.Serializable;
 4 import java.util.Objects;
 5 
 6 /*
 7 Serializable接口:标志性接口【里面没有方法】
 8              作用:实现该接口就可以进行序列化操作
 9  */
10 public class student implements Serializable {
11     //版本号: 避免在序列化与反序列化的转换中出现不同的版本号而导致异常的出现
12     /*
13        开启版本号的方法:  ①复制Serializable
14                        ②打开File的Settings粘贴查询
15                        ③勾选serialVersionUID
16                        ④勾选最后一个
17      */
18     private static final long serialVersionUID = -1741835853226977161L;
19 
20     private String name;
21     private int age;
22     //transient: 瞬态关键字
23     //         作用:加上该关键字就不会被序列化了
24     private transient String address;
25 
26     public student() {
27     }
28 
29     public student(String name, int age) {
30         this.name = name;
31         this.age = age;
32     }
33 
34 
35     public String getName() {
36         return name;
37     }
38 
39     public void setName(String name) {
40         this.name = name;
41     }
42 
43     public int getAge() {
44         return age;
45     }
46 
47     public void setAge(int age) {
48         this.age = age;
49     }
50 
51     @Override
52     public boolean equals(Object o) {
53         if (this == o) return true;
54         if (o == null || getClass() != o.getClass()) return false;
55         student student = (student) o;
56         return age == student.age && Objects.equals(name, student.name);
57     }
58 
59     @Override
60     public int hashCode() {
61         return Objects.hash(name, age);
62     }
63 
64     @Override
65     public String toString() {
66         return "student{" +
67                 "name='" + name + '\'' +
68                 ", age=" + age +
69                 '}';
70     }
71 }
View Code
复制代码

 

总结:

 

posted @   唯易人生  阅读(18)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示