Java Serializable对象实例:实现数据读写
182 浏览量
更新于2024-09-01
收藏 28KB PDF 举报
在Java编程中,序列化(Serialization)是一种将对象的状态转换为字节流的过程,以便于存储或在网络上传输。序列化对于实现跨平台的数据持久化和网络通信至关重要。当一个类实现了`java.io.Serializable`接口后,它的实例可以被转换为字节流,反之亦然,通过反序列化可以将其恢复为原来的对象状态。
在这个实例中,我们有一个名为`Student`的类,它实现了`Serializable`接口,表明该类可以被序列化。`Student`类包含了几个私有变量:`name`(姓名)、`id`(学生ID)、`age`(年龄),以及一个`students`列表,表示关联的学生群体。这些变量都有对应的getter和setter方法,用于获取和设置属性值。
`toString()`方法被重写,用于在序列化过程中提供一个字符串表示,方便查看对象的信息。当对象被序列化时,会调用这个方法,生成包含所有字段值的字符串。
以下是如何使用序列化来读写`Student`对象的步骤:
1. 创建一个`Student`对象并设置属性值:
```java
Student student = new Student();
student.setName("张三");
student.setId("001");
student.setAge(18);
List<Student> studentsList = new ArrayList<>();
student.setStudents(studentsList); // 添加学生列表
```
2. 序列化对象:
```java
ObjectOutputStream outputStream = null;
try {
outputStream = new ObjectOutputStream(new FileOutputStream("student.ser"));
outputStream.writeObject(student);
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (outputStream != null) {
outputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
```
这段代码创建了一个`ObjectOutputStream`,并将`student`对象写入到名为`student.ser`的文件中。
3. 反序列化对象:
```java
ObjectInputStream inputStream = null;
Student deserializedStudent = null;
try {
inputStream = new ObjectInputStream(new FileInputStream("student.ser"));
deserializedStudent = (Student) inputStream.readObject();
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println(deserializedStudent); // 输出序列化前的对象信息
```
这段代码通过`ObjectInputStream`从文件中读取已序列化的`Student`对象,并将其转换回原始对象。
总结来说,Java中的`Serializable`接口允许我们将对象持久化,便于存储和传输。在实际应用中,序列化常用于网络通信、持久化存储(如数据库)等场景,确保对象状态的一致性。上述实例展示了如何创建、序列化和反序列化一个`Student`对象,这是Java编程中处理可序列化对象的基础操作。
1266 浏览量
106 浏览量
2023-04-05 上传
110 浏览量
2024-11-16 上传
118 浏览量
287 浏览量
weixin_38612811
- 粉丝: 5
最新资源
- 易语言实现百度短网址的POST方法
- Lyo:轻松实现Node.js模块到浏览器的转换
- Upptime监控页面:开源正常运行时间监控与状态
- SpringBoot整合响应式框架实现高并发Web应用开发教程
- Python nbimporter:弃用从IPython笔记本导入模块的实践
- CS331课程实践:掌握数据结构和算法
- 单片机LED显示用字库文件压缩包解析
- 易语言实现淘宝邮箱批量绑定自动化操作指南
- C#练习项目集:提升编程技能
- C# 实现Windows定时服务的创建与发布指南
- MATLAB软件包助力光学镜头SFR计算
- 数学建模在自来水管系统中的应用代码解析
- 开源数字命理计算器:Mac OS X 上的生活信息解析
- 当当网JS焦点图广告代码实现与解析
- 易语言实现UDP内网P2P交互技术详解
- 易语言BE5.0游侠源码深度解析与应用