零基础学Java第二十一天之IIO流之对象流

IO流之对象流

1、对象流

1、理解

将对象写入到文件,将文件里的对象读取到程序中

class ObjectInputStream – 对象输入流

class ObjectOutputStream – 对象输出流

序列化/钝化:程序里的对象 写入到 文件中

反序列化/活化:文件中的对象 读取到 程序中

2、注意

  1. 对象所属的类必须实现序列化接口 - Serializable
  2. Serializable接口没有任何抽象方法
  3. 没有任何抽象方法的接口叫做标记型接口
  4. Serializable的实现类必须添加序列化ID - serialVersionUID
  5. transient修饰的成员属性,该属性不会随着对象写入到文件中
  6. 静态属性不会随着对象写入到文件中,因为静态属性不属于对象

3、使用

1、利用 对象输出流 向文件写入数据
package com.xx.IO04;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.Date;public class Test01 {public static void main(String[] args) throws IOException {//1.创建流对象ObjectOutputStream ois = new ObjectOutputStream(new FileOutputStream("xx.txt"));//2.写入数据ois.write(100);//写入int类型的数据ois.writeDouble(123.123);//写入double类型的数据ois.writeUTF("yxased");//写入UTF-8编码格式的字符串类型的数据ois.writeObject(new Date());//写入对象类型的数据//3.关闭资源ois.close();}
}
2、利用 对象输入流 读取文件里的数据
package com.xx.IO04;import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.util.Date;public class Test02 {/*** 知识点:利用 对象输入流 读取文件里的数据* @throws ClassNotFoundException */public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException {//1.创建对象流对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream("xx.txt"));//2.读取数据int read = ois.read();System.out.println(read);double d = ois.readDouble();String utf = ois.readUTF();Date Date = (Date)ois.readObject();System.out.println(d);System.out.println(utf);System.out.println(Date);//关闭资源ois.close();}
}
3、自定义对象
package com.xx.io04;import java.io.Serializable;public class User implements Serializable{private static final long serialVersionUID = 8798250558176997713L;private String username;private transient String password;private String nickName;private String role;private double hp;private double mp;public User() {}public User(String username, String password, String nickName, String role, double hp, double mp) {this.username = username;this.password = password;this.nickName = nickName;this.role = role;this.hp = hp;this.mp = mp;}public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}public String getNickName() {return nickName;}public void setNickName(String nickName) {this.nickName = nickName;}public String getRole() {return role;}public void setRole(String role) {this.role = role;}public double getHp() {return hp;}public void setHp(double hp) {this.hp = hp;}public double getMp() {return mp;}public void setMp(double mp) {this.mp = mp;}@Overridepublic String toString() {return "User [username=" + username + ", password=" + password + ", nickName=" + nickName + ", role=" + role+ ", hp=" + hp + ", mp=" + mp + "]";}
}
4、利用 对象输出流 向文件写入自定义对象
package com.xx.IO04;import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class Test03 {public static void main(String[] args) throws FileNotFoundException, IOException {//创建溜对象ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("xx.txt"));//写入数据oos.writeObject(new User("1123423479", "123123", "撕裂的忧伤", "艾瑞莉娅", 1200, 800));oos.writeObject(new User("2323543430", "321321", "沙漠野猪", "DJ", 1000, 1000));oos.writeObject(new User("1234532143", "123456", "玛卡巴卡", "元歌", 800, 1200));//关闭资源oos.close();}
}
5、利用 对象输入流 读取文件里的自定义对象
package com.xx.IO04;import java.io.EOFException;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.ObjectInputStream;public class Test04 {public static void main(String[] args) throws FileNotFoundException, IOException {//1.创建流对象ObjectInputStream ois = new ObjectInputStream(new FileInputStream("xx.txt"));//2.读取数据User user;try {while((user=(User)ois.readObject()) != null){System.out.println(user);}} catch (EOFException e) {} catch (ClassNotFoundException e) {// TODO Auto-generated catch blocke.printStackTrace();}}
}

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【OpenCV实战】OpenCV实现自动调整亮度和对比度

一,基于局部直方图信息增强算法 对比度受限的自适应直方图均衡化(Contrast Limited Adaptive Histogram Equalization,简称CLAHE)是一种用于图像增强的技术,其原理主要基于自适应直方图均衡化(Adaptive Histogram Equalization,简称AHE)但增加了对比度限制来避免过度放…

uniapp蓝牙打印图片

前言 这是个蓝牙打印图片的功能,业务是打印界面固定的demo范围,这里通过html2canvas插件生成的图片base64,然后图片base64绘制到canvas中去后,获取canvas中的像素信息,然后对像素信息进行一个灰度值处理,灰…

在Linux系统中解决Java生成海报文字乱码和缺少字体文件的问题

在Linux系统中,如果缺少特定的字体文件,可以通过以下几种方法来解决: 1. 安装系统字体包 大多数Linux发行版提供了各种字体包,可以通过包管理器安装这些字体包。例如,在Debian/Ubuntu系统上,可以使用以下命令安装常见的字体包: # 安装基本的字体包 sudo apt-get updat…

Java集合的组内平均值怎么计算

要计算Java集合(例如List或Set中的Integer、Double或其他数值类型的对象)的组内平均值,我们需要遍历这个集合,累加所有的元素值,然后除以集合的大小(即元素的数量)。以下是一个详细的步骤说明和…

opencl色域变换,处理传递显存数据

在使用ffmpeg解码后的多路解码数据非常慢,还要给AI做行的加速方式是在显存处理数据,在视频拼接融合产品的产品与架构设计中,提出了比较可靠的方式是使用cuda,那么没有cuda的显卡如何处理呢 ,比较好的方式是使用opencl来…

go语言的一些常见踩坑问题

开始之前,介绍一下​最近很火的开源技术,低代码。 作为一种软件开发技术逐渐进入了人们的视角里,它利用自身独特的优势占领市场一角——让使用者可以通过可视化的方式,以更少的编码,更快速地构建和交付应用软件&#…

安卓手机APP开发__网络连接性支持VPN

安卓手机APP开发__网络连接性支持VPN 安卓提供了API给开发者,来创建一个虚拟的私有网络(VPN)的解决方案. 根据这里的介绍,你能知道如何开发和测试你的针对安卓设备的VPN的客户端. 概述 VPN允许设备为了安全地连接网络,而没有物理性的连接在一个网络上. 安卓包括了一个内嵌的…

【无重复字符的最长子串】python,滑动窗口+哈希表

滑动窗口哈希表 哈希表 seen 统计: 指针 j遍历字符 s,哈希表统计字符 s[j]最后一次出现的索引 。 更新左指针 i : 根据上轮左指针 i 和 seen[s[j]],每轮更新左边界 i ,保证区间 [i1,j] 内无重复字符且最大。 更新结…

使用JSDOM安全截断文章HTML内容

在Web开发中,经常需要处理大量的HTML内容,尤其是在展示文章预览、动态加载内容或限制显示长度等场景中。直接截断HTML字符串可能会导致页面布局混乱、样式错误或标签不完整等问题。为了安全地截断HTML内容,我们可以利用jsdom库来解析HTML&…

JVM学习-垃圾回收器(一)

垃圾回收器 按线程数分类 串行垃圾回收器 串行回收是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,此时工作线程被暂停,直至垃圾收集工作结束 在诸如单CPU处理器或者较小的应用内存等硬件平台不是特别优越的场合,串行回收器的性能表…

http和https的区别,怎么免费实现https(内涵教学)

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此&…

etcd 和 MongoDB 的混沌(故障注入)测试方法

最近在对一些自建的数据库 driver/client 基础库的健壮性做混沌(故障)测试, 去验证了解业务的故障处理机制和恢复时长. 主要涉及到了 MongoDB 和 etcd 这两个基础组件. 本文会介绍下相关的测试方法. MongoDB 中的故障测试 MongoDB 是比较世界上热门的文…

AI网络爬虫:批量爬取电视猫上面的《庆余年》分集剧情

电视猫上面有《庆余年》分集剧情&#xff0c;如何批量爬取下来呢&#xff1f; 先找到每集的链接地址&#xff0c;都在这个class"epipage clear"的div标签里面的li标签下面的a标签里面&#xff1a; <a href"/drama/Yy0wHDA/episode">1</a> 这个…

速盾:负载均衡能防ddos攻击吗?

负载均衡是一种分布式系统的设计思想&#xff0c;通过将流量分散到多个服务器上&#xff0c;以提高系统的稳定性和可扩展性。然而&#xff0c;负载均衡本身并不能完全防止DDoS攻击&#xff0c;但可以在一定程度上减轻其影响。 DDoS&#xff08;分布式拒绝服务&#xff09;攻击…

【C语言】8.C语言操作符详解(1)

文章目录 1.操作符的分类2.⼆进制和进制转换3.原码、反码、补码4.移位操作符4.1 左移操作符4.2 右移操作符 5.位操作符&#xff1a;&、|、^、~5.1 &&#xff1a;按位与5.2 |&#xff1a;按位或5.3 ^&#xff1a;按位异或5.4 ~&#xff1a;按位取反5.5 例题例题1例题2例…

短视频矩阵系统4年独立开发正规代发布接口源码搭建部署开发

1. 短视频矩阵源码技术开发要求及实现流程&#xff1a; 短视频矩阵源码开发要求具备视频录制、编辑、剪辑、分享等基本功能&#xff0c;支持实时滤镜、特效、音乐等个性化编辑&#xff0c;能够实现高效的视频渲染和处理。开发流程主要包括需求分析、技术选型、设计架构、编码实…

Web前端开发技术、详细文章、(例子)html 列表、有序列表、无序列表、列表嵌套

目录 列表概述 列表类型与标记符号 无序列表 语法&#xff1a; 语法说明&#xff1a; 无序列表标记的 type 属性及其说明 代码解释 有序列表 基本语法 属性说明 1、列表 o1标记的属性 2、列表项li标记的属性 有序列表 o1标记的属性、值 代码解释 列表嵌套 基本…

如何将Qt pro工程文件 改成CMakeLists.txt

Qt pro工程管理文件&#xff0c;本人认为是很好用的&#xff0c;语法简洁易懂&#xff0c;但是只能在QtCreator中使用&#xff0c;想用使用其它IDE比如Clion或者vs&#xff0c;CMakeLists是种通用的选择&#xff0c;另外QtCreator的调试功能跟粑粑一样。 一&#xff0c;思路 …

FreeBSD/Linux下的系统资源监视器排队队

bpytop bpytop 是一个基于 Python 的资源监视器&#xff0c;可以在 FreeBSD 上使用。它提供了对文件写入磁盘、网络、CPU 和内存占用的监视功能。 pkg install bpytop 或者用ports安装 cd /usr/ports/sysutils/bpytop/ make install clean bashtop bashtop 也是一个基于 P…

化简资源分配图判断是否发生死锁

目录 1.资源分配图的概念 2.判断是否发生死锁 1.资源分配图的概念 资源分配图表示进程和资源之间的请求关系&#xff0c;例如下图&#xff1a; P代表进程&#xff0c;R代表资源&#xff0c;R方框中 有几个圆球就表示有几个这种资源&#xff0c;在图中&#xff0c;R1指向P1&a…