Java Serializable对象实例:实现数据读写
129 浏览量
更新于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编程中处理可序列化对象的基础操作。
2020-12-22 上传
2023-03-31 上传
2023-04-05 上传
2023-04-23 上传
2023-06-28 上传
2023-07-25 上传
2023-08-27 上传
weixin_38612811
- 粉丝: 5
- 资源: 931
最新资源
- Haskell编写的C-Minus编译器针对TM架构实现
- 水电模拟工具HydroElectric开发使用Matlab
- Vue与antd结合的后台管理系统分模块打包技术解析
- 微信小游戏开发新框架:SFramework_LayaAir
- AFO算法与GA/PSO在多式联运路径优化中的应用研究
- MapleLeaflet:Ruby中构建Leaflet.js地图的简易工具
- FontForge安装包下载指南
- 个人博客系统开发:设计、安全与管理功能解析
- SmartWiki-AmazeUI风格:自定义Markdown Wiki系统
- USB虚拟串口驱动助力刻字机高效运行
- 加拿大早期种子投资通用条款清单详解
- SSM与Layui结合的汽车租赁系统
- 探索混沌与精英引导结合的鲸鱼优化算法
- Scala教程详解:代码实例与实践操作指南
- Rails 4.0+ 资产管道集成 Handlebars.js 实例解析
- Python实现Spark计算矩阵向量的余弦相似度