简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者
博主新书推荐:《Android系统多媒体进阶实战》🚀
Android Audio工程师专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀
Android多媒体专栏: 多媒体系统工程师系列【原创干货持续更新中……】🚀
推荐1:车载系统实战课:AAOS车载系统+AOSP14系统攻城狮入门视频实战课 🚀
推荐2:HIDL与AIDL实战课:Android14 Binder之HIDL与AIDL通信实战课 🚀
人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药.
🍉🍉🍉文章目录🍉🍉🍉
🌻1. 前言
本篇目的:Java序列化之ObjectInputStream:用法实例
🌻2. Java序列化ObjectInputStream介绍
-
基本概念
ObjectInputStream是Java提供的对象反序列化输入流,用于将字节流恢复为原始对象,与ObjectOutputStream配对使用。 -
功能
提供readObject、readInt、readUTF等方法,支持读取对象、基本类型、字符串,自动解决对象图与循环引用。 -
使用限制
字节流需由ObjectOutputStream生成;类路径必须一致;serialVersionUID需匹配;静态与transient字段需手动处理。 -
性能特性
基于字节流直接构造对象,速度中等;可通过readResolve优化单例。 -
使用场景
对象持久化恢复、网络接收、深拷贝还原、缓存加载。
🌻3. 代码实例
🌻3.1 使用ObjectInputStream从文件恢复对象
-
应用场景
读取磁盘保存的对象。 -
用法实例
import java.io.*; class User implements Serializable { private static final long serialVersionUID = 1L; String name; int age; } public class LoadDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { try (ObjectInputStream ois = new ObjectInputStream(new FileInputStream("user.dat"))) { User u = (User) ois.readObject(); System.out.println(u.name + " " + u.age); } } }
输出:
Alice 20
🌻3.2 使用ObjectInputStream通过Socket接收对象
-
应用场景
服务端读取客户端发送的消息。 -
用法实例
import java.io.*; import java.net.*; class Message implements Serializable { String text; } public class ReceiveDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { try (ServerSocket ss = new ServerSocket(9000); Socket s = ss.accept(); ObjectInputStream ois = new ObjectInputStream(s.getInputStream())) { Message m = (Message) ois.readObject(); System.out.println(m.text); } } }
输出:
hello
🌻3.3 使用ObjectInputStream实现深拷贝还原
-
应用场景
通过反序列化获得独立对象副本。 -
用法实例
import java.io.*; class Data implements Serializable { int value; } public class DeepCloneReadDemo { public static void main(String[] args) throws IOException, ClassNotFoundException { byte[] bytes = ...; // 由ObjectOutputStream生成 ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(bytes)); Data copy = (Data) ois.readObject(); System.out.println(copy.value); } }
输出:
42
🌻3.4 序列化ObjectInputStream总结
关键词 | 功能描述 | 典型应用 |
---|---|---|
ObjectInputStream | 对象反序列化输入流 | 文件恢复、网络接收、深拷贝 |
readObject | 读取对象 | 自动还原对象图 |
readResolve | 单例保护 | 避免重复实例化 |