Java重修笔记 第六十三天 坦克大战(十三)IO 流 - ObjectInputStream 和 ObjectOutputStream、对处理流的细节整理

news/2024/10/9 8:29:08/
  • ObjectInputStream 类的常用方法
 1. 写入字符串

        public void writeUTF(String str) throws IOException

        参数:str - 要写入的字符串

2. 序列化一个对象

        public final void writeObject(Object obj) throws IOException

        参数:obj - 要写入的对象

        说明:此对象应实现 Serializable 或 Externalizable 接口

3. 关闭流

        public void close() throws IOException

        说明:必须 close 关闭或者 flush 刷新,否则写入不到指定文件

public class ObjectOutputStream01 {public static void main(String[] args) throws IOException {String filePath = "d:\\data.dat";ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream(filePath));// 存放数据, 序列化数据到文件中oos.writeInt(100);oos.writeBoolean(true);oos.writeChar('a');oos.writeDouble(12.5);oos.writeUTF("韩顺平教育");// 保存对象oos.writeObject(new Dog("小黄", 2));// 关闭流oos.close();System.out.println("序列化完成");}
}class Dog implements Serializable {private String name;private int age;public Dog(String name, int age) {this.name = name;this.age = age;}
}

  • ObjectOutputStream 类的常用方法
1. 读取对象

        public final Object readObject() throws IOException, ClassNotFoundException

        返回值:返回读取到的 Object 对象

        异常:ClassNotFoundException - 无法找到序列化对象的类

                   InvalidClassException - 类的序列化版本与从流中读取的类描述符的类型不匹配,或者在加载序列化类的过程中找不到该类

                   OptionalDataException - 没有读取完前面的元素,或者前面的元素使用的readXXX方法读错了原始数据

        说明:反序列化读取顺序,必须和序列化顺序一致,如果要调用该类的特有方法需要获得该类的定义,并向下转型。(要么引入包,要么将该类设置为 public 公有的)

2. 关闭流

        public void close() throws IOException

public class ObjectInputStream01 {public static void main(String[] args) throws IOException, ClassNotFoundException {String filePath = "d:\\data.dat";ObjectInputStream ois = new ObjectInputStream(new FileInputStream(filePath));// 反序列化的顺序 必须和序列化的顺序一致// 存放数据, 序列化数据到文件中System.out.println(ois.readInt());System.out.println(ois.readBoolean());System.out.println(ois.readChar());System.out.println(ois.readDouble());System.out.println(ois.readUTF());// 读取保存对象System.out.println(ois.readObject());// 关闭流ois.close();System.out.println("反序列化完成");}
}

  • 对处理流的细节

1. 序列化对象必须要实现 Serializable 或者 externalizable

2. 文件读写顺序要一致,若不一致会报 OptionalDataException 异常

3. 序列化的类中建议添加一个 SerialVersionUID,可以提高版本兼容性

4. static 和 transient 关键字修饰的方法和属性不会被序列化,用于保护一些敏感的信息

5. 序列化对象时,该对象的所有属性也都必须实现序列化接口,除了static 和 transient

6. 序列化具有可继承性,如果父类实现了序列化接口,其所有子类也默认实现了序列化接口


http://www.ppmy.cn/news/1536548.html

相关文章

C++ static静态

个人主页:Jason_from_China-CSDN博客 所属栏目:C系统性学习_Jason_from_China的博客-CSDN博客 所属栏目:C知识点的补充_Jason_from_China的博客-CSDN博客 概念概述 用 static 修饰的成员变量,称之为静态成员变量,静态成…

智能听诊器:守护宠物健康的新助手

在宠物的世界里,健康是它们幸福生活的基石。随着科技的发展,宠物健康管理也迎来了新的时代。智能听诊器,作为宠物健康管理的新伙伴,正逐渐成为宠物主人的得力助手。 实时监测,健康预警 智能听诊器的核心功能是实时监…

Hierarchical Cross-Modal Agent for Robotics Vision-and-Language Navigation

题目:用于视觉语言导航的层次化跨模态智能体 摘要 1. 问题背景和现有方法 VLN任务:这是一种复杂的任务,要求智能体基于视觉输入和自然语言指令进行导航。 现有方法的局限性:之前的工作大多将这个问题表示为离散的导航图&#x…

玄机:第五章 linux实战-黑链

简介 服务器场景操作系统 Linux 服务器账号密码 root xjty110pora 端口 2222 用 finalshell 连接 1. 找到黑链添加在哪个文件 flag 格式 flag{xxx.xxx} 查找文件中包含“黑链”的内容; grep -rnw /var/www/html/ -e 黑链-r:递归搜索。这个选项告诉 gre…

Windows平台如何实现RTSP|RTMP流录像?

好多开发者使用场景,除了实现基础的低延迟RTSP、RTMP播放外,还需要实现RTSP、RTMP流数据的本地录像功能。本文以大牛直播SDK的Windows平台播放模块为例,介绍下如何实现RTSP、RTMP流录像。 功能设计 [拉流]支持拉取RTSP流录像; [拉…

数据提取之JSON与JsonPATH

第一章 json 一、json简介 json简单说就是javascript中的对象和数组,所以这两种结构就是对象和数组两种结构,通过这两种结构可以表示各种复杂的结构 > 1. 对象:对象在js中表示为{ }括起来的内容,数据结构为 { key&#xff1…

PHP cURL 教程

PHP cURL 教程 介绍 PHP cURL 是一个强大的库,用于在 PHP 中发送 HTTP 请求。它支持多种协议,包括 HTTP、HTTPS、FTP 等。在本教程中,我们将学习如何使用 PHP cURL 发送 GET 和 POST 请求,以及如何处理响应。 安装 PHP cURL 库通常随 PHP 安装包一起提供。要检查您的系…

【力扣算法题】每天一道,健康生活

2024年10月8日 参考github网站&#xff1a;代码随想录 1.二分查找 leetcode 视频 class Solution { public:int search(vector<int>& nums, int target) {int left 0;int right nums.size()-1;while(left<right){int middle (leftright)/2;if(nums[middle] …