对象流0bjectOutputStream/ObjectInputStream
对象流:0bjectOutputStream/ObjectInputStream
- 增强了缓冲区功能
- 增强了读写8种基本数据类型和字符串功能
增强了读写对象的功能:
writeObject (Object obj)向流中写入一个对象 -序列化
readObject()从流中读取一个对象 -反序列化
0bjectOutputStream序列化
注意事项
(1)序列化类必须实现Serializable接口
(2)序列化类中对象属性要求实现ObjectOutputStream接口
(3)serialVersionUID 序列化版本号ID,保证序列化的类是同一个类
(4)使用transient(瞬间的)修饰属性,这个属性不会被序列化
(5)静态属性也不能序列化
(6)序列化多个对象,可以借助集合实现
package IO.Demo04;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
/**使用ObjectOutputStream实现对象序列化
* 要求:(1)序列化类必须实现Serializable接口,
* (2)序列化类中对象属性要求实现ObjectOutputStream接口
* (3)serialVersionUID 序列化版本号ID,保证序列化的类是同一个类
* (4)使用transient(瞬间的)修饰属性,这个属性不会被序列化
* (5)静态属性也不能序列化
* (6)序列化多个对象,可以借助集合实现
* @author liu
*/
public class ObjectOutputStreamA {
public static void main(String[] args)throws IOException {
//1创建流
FileOutputStream fos = new FileOutputStream("G:\\Stu.bin");
ObjectOutputStream OOS = new ObjectOutputStream(fos);
//2序列化(写入操作)
Student s1 = new Student("张三",20);
Student s2 = new Student("李思",40);
ArrayList<Student> stu =new ArrayList<>();
stu.add(s1);
stu.add(s2);
OOS.writeObject(stu);
/* OOS.writeObject(s1);
OOS.writeObject(s2);*/
//3关闭流
OOS.close();
System.out.println("序列化完毕");
}
}
ObjectInputStream反序列化
package IO.Demo04;
import java.io.FileInputStream;
import java.io.ObjectInputStream;
import java.util.ArrayList;
/**
* @author liu
*/
public class ObjectInputStreamA {
public static void main(String[] args) throws Exception {
//1创建对象流
FileInputStream fis = new FileInputStream("G:\\Stu.bin");
ObjectInputStream ois = new ObjectInputStream(fis);
//2读取文件(反序列化)
/* Student s1= (Student) ois.readObject();
Student s2= (Student) ois.readObject();*/
ArrayList<Student> stu = (ArrayList<Student>) ois.readObject();
//3关闭流
ois.close();
System.out.println("执行完毕");
/* System.out.println(s1);
System.out.println(s2);*/
System.out.println(stu);
}
}
对象
package IO.Demo04;
import java.io.Serializable;
public class Student implements Serializable {
/*
* serialVersionUID 序列化版本号ID
* */
private static final long serialVersionUID = 110L;
private String name;
private transient int age;
public Student() {
}
public Student(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
分类:
I/O流
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现