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 }
总结:
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律