[java进阶]——高级IO流家族,序列化流、打印流、压缩流、转换流

🌈键盘敲烂,年薪30万🌈

目录

一、序列化流 (对象操作流)

二、打印流

三、压缩流(zip文件)

四、转换流


一、序列化流 (对象操作流)

序列化的概念:

当不想让他人读懂文件里的数据时,可以将数据序列化

创建一个自定义对象时,会根据所有成员计算出一个序列号。

存储数据时,会先根据序列号序列化内容,然后把序列号和被序列内容一同存到文件里面。

//序列化流
Studen s = new Studen("xiaohong", 14);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("10_16\\a.txt"));
oos.writeObject(s);
oos.close();
//反序列化输入流
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("10_16\\a.txt"));
Object o = ois.readObject();
ois.close();
System.out.println(((Studen) o));

代码解析:

要关联基本流

别忘了关流

细节:

①要序列化的类必须实现Serializable接口,该接口是标记性接口,里面没有抽象方法,作用就是标识这个类可被序列化和反序列化

②如果我们存完该类后,又修改了该类的成员,序列号就会变,序列号变也就意味着以前的序列号没用了,你在反序列化就会报错,在该类中添加以下代码。

private static final long serialVersionUID = -1326719789726226251L;

③反序列化出来的数据类型是Object,我们要强转为需要的类型

用集合序列化多个对象

如果我们在存储一个类的多个对象是,在反序列化时读取到最后一个就会错,EOFExpection异常,所以 一般我们用集合存储多个对象,直接序列化和反序列化集合

二、打印流

PrintStream ps = new PrintStream(new FileOutputStream("10_16\\a.txt"));
ps.println("BBB");
ps.close();

代码分析:

关联基本流

使用print、printfln等方法向文件写数据

关流

标准输出流

System.out.printfln就是标准输出流,输出到控制台。

System是系统的一个类.out一个静态的输出流,默认指向控制台,所以这也是为什么我们每次打印都能在控制台看到数据

三、压缩流(zip文件)

解压缩本质:从压缩文件读取数据,每一个ZipEntery对象代表一个压缩文件或文件夹

File src = new File("10_16\\a.zip");
File dest = new File("10_16\\");
unzip(src, dest);
private static void unzip(File src, File dest) throws IOException {
ZipInputStream zip = new ZipInputStream(new FileInputStream(src), Charset.forName("GBK"));//nextEntry表示压缩包里面的每一个文件,读取完返回nullZipEntry ze = null;while((ze = zip.getNextEntry()) != null){//如果是文件夹 创建文件夹if(ze.isDirectory()){new File(dest, ze.toString()).mkdir();}else{int tmp = 0;FileOutputStream fos = new FileOutputStream(new File(ze.toString()));while((tmp = zip.read()) != -1){fos.write(tmp);}fos.close();}}zip.close();}

压缩实际:将数据写入到压缩文件,将压缩文件对象放到压缩包里

//压缩文件流File src = new File("10_16\\a");File dest = new File(src.getParent(), src.getName()+".zip");//将文件写入压缩文件流ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(dest));//第三个参数代表压缩包里面的路径//注意第三个参数toZip(src, zos, src.getName());zos.close();private static void toZip(File src, ZipOutputStream zos, String dest) throws IOException {//files是绝对路径File[] files = src.listFiles();for (File file : files) {if(file.isDirectory()){toZip(file, zos, dest+"\\"+file.getName());}else{//将文件写入到entryzip对象里,将此对象put到压缩包里ZipEntry ze = new ZipEntry(dest+"\\"+file.getName());zos.putNextEntry(ze);FileInputStream fis = new FileInputStream(file);int tmp = 0;while((tmp = fis.read()) != -1){zos.write(tmp);}fis.close();zos.closeEntry();}}}

四、转换流

是字符流与字节流之间的桥梁

InputStreamReader:将一个输入字节流转换为字符流(读数据的时候可以读一个字符)

OutputSreamWriter:将一个输出字符流转为字节流(写数据的时候写一个字节)

        //将字节流转换为字符流File newfile = new File("IOTest1\\a.txt");InputStreamReader isr = new InputStreamReader(new FileInputStream(newfile));int tmp = 0;while ((tmp = isr.read()) != -1){System.out.print((char)tmp);}isr.close();
        File newfile = new File("IOTest1\\a.txt");OutputStreamWriter osw = new OutputStreamWriter(new FileOutputStream(newfile));osw.write("我是通过转换流写入的");osw.close();

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

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

相关文章

Java分支结构综合练习一之一元二次方程求解

任务描述 本关任务:变量a、b、c分别为方程ax2bxc0中a、b、c的值,求解该一元二次方程的值,将该值四舍五入后保留两位小数后输出。 import java.util.Scanner;public class Equation {public static void main(String[] args) {Scanner reade…

AI猫咪穿搭也太萌了!用AI写出好故事的22条诀窍;吴恩达AI新课预告;2024年十大战略技术趋势 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🔥 可口可乐与好利来跨界联名,推出与AI共创的新品巧克力 继「酱香拿铁」后又有一款跨界合作让人眼前一亮——可口可乐与好利来…

通用音乐播放器蜂鸣器AX301开发板verilog,视频/代码

名称:通用音乐播放器代码,蜂鸣器播放音乐 软件:Quartus 语言:Verilog 代码说明:本代码为音乐播放器通用代码,只需修改管脚即可适配其他开发板 代码功能: 设计一个音乐播放器,使用…

解决一则诡异的javascript函数不执行的问题

有个vue 音乐播放器项目,由于之前腾讯的搜索接口没法用了,于是改成了别家的搜索接口。 但是由于返回数据结构不一样,代码重构的工作量还是挺大的:包括数据请求,数据处理,dom渲染,处理逻辑都进行…

Elasticsearch:什么是余弦相似度?

余弦相似度是数据科学、文本分析和机器学习领域的基本概念。 如果你想知道什么是余弦相似度或者它如何在现实世界的应用程序中使用,那么你来对地方了。 本指南旨在让你深入了解相似性是什么、其数学基础、优点及其在不同领域的各种应用。读完本指南后,你…

PHP 变量

变量 变量的声明、使用、释放 变量定义 形式 $ 变量名;严格区分大小写 $name; $Name; $NAME //三个变量不是同一个变量字母、数字、下划线组成,不能以数字开头,不能包含其他字符(空白字符、特殊字符) 驼峰式命名法、下划线式命名法 $first_name; $fi…

在 Visual Studio Code (VS Code) 中设置

在 Visual Studio Code (VS Code) 中设置代理服务器的详细教程如下: 打开 Visual Studio Code。 在顶部菜单栏中,点击 "File"(文件) > "Preferences"(首选项) > "Settings…

IP协议(上)

目录 一、初步认识IP协议 二、认识IP地址 三、协议报头格式 1.报头和有效载荷分离 2.20字节的固定数据 四、网段划分 1.一个小例子 2.认识IP地址的划分 3.数据的传输过程 4.特殊的IP地址 5.通信运营商 (1)通信运营商的作用 (2&a…

如何利用考培系统进行个性化学习和评估

考培系统作为一种现代化的学习和评估工具,可以为学生提供个性化的学习和评估服务。它利用先进的技术和算法,根据学生的学习情况和需求,为其量身定制学习计划,并提供相应的评估反馈。 1. 个性化学习 考培系统通过分析学生的学习情…

javaEE - 2(11000字详解多线程)

一:多线程带来的的风险-线程安全 线程安全的概念:如果多线程环境下代码运行的结果是符合我们预期的,即在单线程环境应该的结果,则说这个程序是线程安全的。 当多个线程同时访问共享资源时,就会产生线程安全的风险&am…

Vue和React的区别

前言: 相信有个三两年经验的前端,在面试过程中都遇到过这个问题吧。如果没有提前思考过,那回答起来就是啊哦额。 作为前端最火的两个框架而言,可以说它们没什么区别,你vue能做的项目我react就不能做了吗&#x…

Spring Cache+Redis缓存数据

Spring Cache缓存组件&#xff0c;提供了类似Transactional注解事务的注解Cache支持&#xff0c;且提供了Cache等抽象&#xff0c;方便切换各种底层Cache(比如Redis) 一、添加依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId…

【AIGC核心技术剖析】扩大富有表现力的人体姿势和形状估计SMPLer-X模型

富有表现力的人体姿势和形状估计 (EHPS) 将身体、手和面部运动捕捉与众多应用结合起来。尽管取得了令人鼓舞的进展,但当前最先进的方法仍然在很大程度上依赖于有限的训练数据集。在这项工作中,我们研究了将 EHPS 扩展到第一个通用基础模型(称为 SMPLer-X),以 ViT-Huge 作为…

【译】快速开始 Compose 跨平台项目

原文&#xff1a; Compose Multiplatform application 作者&#xff1a;JetBrains 注意 Compose Multiplatform 中的 iOS 部分目前处于 Alpha 状态。以后可能会有不兼容的更改&#xff0c;届时也许需要手动进行迁移。 你可以使用这个模板来开发同时支持桌面、安卓和 iOS 的跨平…

GitHub验证的2FA

一、 起因&#xff1a; GitHub需要双重身份验证 (2FA) 是登录网站或应用时使用的额外保护层。启用 2FA 时&#xff0c;必须使用您的用户名和密码登录&#xff0c;并提供另一种只有您知道或可以访问的身份验证形式。 二、解决&#xff1a; 2.1 这里使用chrome的身份验证插件进…

如何在vue中实现图片懒加载

1.什么是图片懒加载 概念当图片还未出现在浏览器的可视区&#xff0c;图片并不加载src所引入的图片资源。只有当图片出现在可视区时&#xff0c;才加载图片资源。 好处&#xff1a;当页面中需要许多图片进行展示。但是&#xff0c;在我们不可视区的图片我们可以进行图片懒加载…

在emacs中,设置latex的主文档

文档&#xff1a; chapter1.tex chapter2.tex main.tex 在chapter1.tex中&#xff0c;先按下 ctrlc ctrln&#xff0c;再按下ctrlc ctrla&#xff0c;在下方的提示框中输入主文档。

支付宝小程序介入人脸识别(金融级--前端部分)

在这里只做前端部分说明: 详情参考文档:如何通过集成支付宝小程序唤起实人认证服务_实人认证-阿里云帮助中心 操作步骤 调用 API 发起认证。 发起认证服务。 调用 startBizService 接口请求认证。 function startAPVerify(options, callback) {my.call(startBizService, {n…

AWS S3加密

Hello大家好&#xff61; 在本课时我们将讨论S3加密相关的内容。 S3加密相关是认证考试的一个重要的主题考点&#xff0c;您需要了解亚马逊S3的几种不同类型的加密方式。| 首先是静态数据的加密&#xff0c;静态数据加密是指数据存储在亚马逊S3 数据中心的磁盘上时&#xff0…

stable diffusion和midjourney哪个好

midjourney和stable diffusion哪个好&#xff1f;midjourney和stable diffusion的区别&#xff1f;那么今天就从这2款软件入手&#xff0c;来探索一下他们的功能的各项区别吧&#xff0c;让你选择更适合你的一款ai软件。 截至目前&#xff0c;我们目睹了生成式人工智能工具的在…