对象流
-
对象流ObjectOutputStream/ObjectInputStream
- 增强了缓冲区功能
- 增强了读取八种基本数据类型和字符串功能
- 增强了读写对象的功能:
- readObject():从流中读取一个对象
- writeObject(Object obj):将一个对象写入流中
-
使用流传输对象的过程称为序列化(内存写入硬盘等存储设备)和反序列化(硬盘等存储设备写入内存)
-
序列化和反序列化
/** * 序列化,把对象写入硬盘 * 要求: * (1)对象类型继承Serializable接口(标记接口,表示该类可被序列化) * (2)对象中的引用数据类型字段,该引用类也需要实现Serializable接口。 */ public class objectOutputStream { public static void main(String[] args) throws Exception{ //创建基础节点流 FileOutputStream fos = new FileOutputStream("E:\\student.bin");//二进制文件 //创建对象流 ObjectOutputStream oss = new ObjectOutputStream(fos); //实例化对象 Student student = new Student("zhangsan"); oss.writeObject(student); oss.close(); } }
/** * 反序列化,ObjectInputStream */ public class objectInputStream { public static void main(String[] args) throws Exception{ //创建基础节点流 FileInputStream fis = new FileInputStream("E:\\student.bin"); //创建对象输入流,反序列化 ObjectInputStream ois = new ObjectInputStream(fis); //读取文件 Student student =(Student)ois.readObject(); ois.close(); System.out.println("finish"); System.out.println(student); } } //输出结果: finish Student{name='zhangsan'}
-
对象类型继承Serializable接口(标记接口,表示该类可被序列化)
-
对象中的引用数据类型字段,该引用类也需要实现Serializable接口。
-
使用transient修饰的属性不能被序列化。
-
序列化版本号ID,保证序列化的类和反序列化的类是同一个类。
-
静态属性不能被序列化。
-
可以借助集合序列化多个对象。
public class Student implements Serializable{ public Adress address;//Adress类也需要实现Serializable接口 transient int age;//age属性不能被序列化 private static final serialVersion = 100L; static int number;//静态属性不可序列化 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~