七,对象流(序列化)

news/2024/10/21 20:31:12

Java对象流详解:ObjectInputStream和ObjectOutputStream

在Java中,对象流是用于实现对象的序列化和反序列化的特殊流。对象流允许我们将对象的状态保存到文件中,或者通过网络传输到另一端,然后在另一端重建对象的状态。这是通过实现Serializable接口来完成的。

对象流概述

对象流主要分为两类:

  • 对象输入流:用于反序列化对象,即将字节数据转换回对象。
  • 对象输出流:用于序列化对象,即将对象转换为字节数据。

对象输入流:ObjectInputStream

ObjectInputStream是用于从字节输入流中读取字节数据,并将其转换回Java对象。

构造方法

// 使用InputStream构造ObjectInputStream
InputStream is = new FileInputStream("serializedObj.txt");
ObjectInputStream ois = new ObjectInputStream(is);

读取对象

try {ObjectInputStream ois = new ObjectInputStream(new FileInputStream("serializedObj.txt"));// 读取对象MyObject obj = (MyObject) ois.readObject();System.out.println("Object read: " + obj);
} catch (IOException | ClassNotFoundException e) {e.printStackTrace();
} finally {try {ois.close(); // 关闭流} catch (IOException e) {e.printStackTrace();}
}

对象输出流:ObjectOutputStream

ObjectOutputStream是用于将Java对象转换为字节数据,并写入到字节输出流中。

构造方法

// 使用OutputStream构造ObjectOutputStream
OutputStream os = new FileOutputStream("serializedObj.txt");
ObjectOutputStream oos = new ObjectOutputStream(os);

写入对象

try {MyObject obj = new MyObject();// 序列化对象ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("serializedObj.txt"));oos.writeObject(obj);
} catch (IOException e) {e.printStackTrace();
} finally {try {oos.close(); // 关闭流} catch (IOException e) {e.printStackTrace();}
}

序列化和反序列化

为了使对象能够被序列化,对象的类必须实现Serializable接口。这个接口是一个标记接口,不包含任何方法。一旦一个类实现了Serializable接口,它的实例就可以被序列化和反序列化。

public class MyObject implements Serializable {private static final long serialVersionUID = 1L;// 类的其它成员和方法
}

注意事项

  • 序列化ID:每个可序列化类都有一个serialVersionUID,用于验证序列化和反序列化过程中的版本兼容性。
  • transient关键字:使用transient关键字声明的成员变量不会被序列化。
  • 安全问题:序列化可能会引发安全问题,因为反序列化时可以创建任何对象。

结论

对象流是Java中处理对象序列化和反序列化的重要工具,它允许我们轻松地保存和恢复对象的状态。通过ObjectInputStreamObjectOutputStream,我们可以在程序间传输对象,或者将对象保存到文件中。在实际编程中,合理使用对象流可以大大提高程序处理复杂数据的能力。通过上述示例和解释,你应该能够更好地理解和应用对象流。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/74338.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

20222420 2024-2025-1 《网络与系统攻防技术》实验二实验报告

20222420 2024-2025-1 《网络与系统攻防技术》实验二实验报告 1.实验内容 1.1 本周学习内容 1.1.1 后门介绍后门概念:不经过正常认证流程而访问系统的通道 后门类型:编译器、操作系统、应用程序中的后门,潜伏于OS或伪装成APP的后门程序1.1.2 后门案例编译器后门:Xcode 操作…

tms fnc ui

tms fnc uitms fnc ui 这组界面控件,支持DELPHI的VCL和FMX,还支持FPC的LCL。 1)TTMSFNCNavigationPanel2)TTMSFNCTileList3)本文来自博客园,作者:{咏南中间件},转载请注明原文链接:https://www.cnblogs.com/hnxxcxg/p/18490245

第6课 测试用例设计

1.黑盒测试方法2.白盒测试方法术语一: • 动态测试(dynamic testing):通过运行软件的组 件或 系统来测试软件 • 静态测试(static testing):对组件的规格说明书 进行 评审,对静态代码进行走查 • 正式评审(formal review):对评审过程及需求文 档的 一种特定评审 • …

转载 兔兔电脑机器码修改工具1.0

使用说明: 1.关闭**毒软件(1.易语言编写可能会误报 2.需要修改系统信息可能会被拦截); 2.管理员运行; 3.根据需要修改机器码(部分系统需要运行兼容性初始化) 4.修改主板会屏蔽网卡,所以要先修改网卡然后再修改主板; 5.重启电脑即可恢复,网卡修改不会恢复,需要手动改…

机器学习基本介绍

1、人工智能概述 人工智能发展必备三要素:数据 算法 计算力 CPU,GPU,TPU计算力之CPU、GPU对比:CPU主要适合I\O密集型的任务GPU主要适合计算密集型任务 1.1、工智能、机器学习和深度学习的关系人工智能和机器学习,深度学习的关系:机器学习是人工智能的一个实现途径深度学习…

考场环境 NoiLinux 测试

觉得还是有必要提前练一下 用的是官网的 NoiLinux.iso 全程断网下载 虽然不知道实机预安装系统时是不是断网的 NoiLinux,但是保险一点还是选了断网省选的时候,Windows 里只有画图和 Dev-C++分辨率非常构式,需要手动调分辨率,咱们电脑是 1920*1080(没找到适配这个电脑的分辨…

面试题速刷 - 知识广度2

有哪些前端攻击?如何预防? XSS 跨站脚本攻击预防:尖括号替换,Vue中用插值{}不会发生XSS攻击。 CSRF 跨站请求伪造预防:服务端严格控制跨域,验证机制二次确认 SameSite禁止第三方cookie 点击劫持演示一下:预防: 1.判断两个iframe域名是否一致 2.让当前网页只在自己ifram…