java的转换流、压缩流、序列化流、打印流

news2025/2/13 14:32:32

一、转换流
转换流属于字符流,也是一种高级流,用来包装Reader和Writer。转化流是字符流和字节流之间的桥梁。转换输入流为InputStreamReader,把把字节流转化为字符流;转化输出流为OutputStreamWriter,把字符流转化为字节流。
在这里插入图片描述
应用场景:字节流想要使用字符流中的方法则使用转换流。
例如,使用转换输入流读取文件:
一个ANSI编码的文件:
在这里插入图片描述

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码读取
        InputStreamReader isr = new InputStreamReader(new FileInputStream("javase-learning\\src\\example\\org\\domain\\c(ANSI).txt"),"GBK");
        //2.读取数据
        int ch;
        while((ch = isr.read())!= -1){
            System.out.println((char)ch);
        }
        //3.释放资源
        isr.close();
    }
}

在这里插入图片描述
上述这种写法JDK11有了替代方案,使用FileReader,其实FileReader是InputStreamReader的子类。。

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码读取
       FileReader fr = new FileReader("javase-learning\\src\\example\\org\\domain\\c(ANSI).txt", Charset.forName("GBK"));
        //2.读取数据
        int ch;
        while((ch = fr.read())!= -1){
            System.out.println((char)ch);
        }
        //3.释放资源
        fr.close();
    }
}

再例如,使用转化输出流写文件:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码
       OutputStreamWriter osw = new  OutputStreamWriter(new FileOutputStream("javase-learning\\src\\example\\org\\domain\\d.txt"), "GBK");
        //2.写出数据
       osw.write("你好你好");
        //3.释放资源
        osw.close();
    }
}

JDK11替代方案:

public class MyApp {
    public static void main(String[] args) throws IOException {
        //1.创建对象并指定字符编码
      FileWriter fw = new  FileWriter("javase-learning\\src\\example\\org\\domain\\d.txt", Charset.forName("GBK"));
        //2.写出数据
       fw.write("你好你好");
        //3.释放资源
        fw.close();
    }
}

再例如,将本地文件的GBK文件转为UTF-8文件:
在这里插入图片描述

在这里插入图片描述
注意:上述代码运行后d.txt的内容与b.txt的内容用记事本打开结果相同,且d.txt的编码方式为UTF-8。
二、序列化流和反序列化流
序列化流(ObjectOutputStream,也称对象操作输出流)与反序列化流(ObjectInputStream,也称对象操作输入流)属于字节流,也是高级流,是对基本流的包装。
在这里插入图片描述
序列化流可以把java中的对象输出到本地文件中。
说明:存储java对象可以用基本流直接存储属性值,还能直接对文件进行修改。而序列化流存储java对象打开文件是看不懂的,而无法直接修改,这样可以防止暂时存储在文件中的数据被用户修改。
(一)序列化流
构造方法:
在这里插入图片描述
成员方法:
在这里插入图片描述
例如,新建一个User类:
在这里插入图片描述
注意:直接使用对象输出流将对象保存到文件中会出现NotSerializableException异常,解决方法是让JavaBean类实现Serializable接口。
在这里插入图片描述
注意:可以看出实现了Serializable接口不用重写方法,因为Serializable接口中没有抽象方法,是标记型接口,一旦实现了这个接口,就表示当前的类可以被序列化。
在这里插入图片描述
编写代码实现序列化:
在这里插入图片描述
结果如下:
在这里插入图片描述
(二)反序列化流
在这里插入图片描述
在这里插入图片描述
注意:
如果将javabean对象通过序列化存入本地文件,如果这时修改javabean类,再去读取原来存储的javabean对象赋给修改后的类创建对象会报错。
为了防止报错,可以在类中定义版本号,这个版本号会存入通过序列化流存入的本地文件。
在这里插入图片描述
如果不想把某些属性字段保存到本地文件中,可以在该属性字段前加瞬态关键字transient
在这里插入图片描述
再例如,运用序列化流和反序列化流读写多个对象。
方式一(读之前已知写入了多少个对象):
在这里插入图片描述
在这里插入图片描述
方式二(读之前不知道写入了多少个对象):
在这里插入图片描述
在这里插入图片描述
补充:
在这里插入图片描述
三、打印流

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

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

相关文章

解析 MySQL 锁机制:共享锁、排它锁、间隙锁、意向锁等,保障数据安全与高并发的秘密武器

前言并发事务问题锁分类锁定读共享锁排它锁 意向排它、意向共享锁自增锁记录锁间隙锁InnoDB 行锁模式及加锁方法死锁总结 前言 MySQL 锁机制比较显而易见,其最显著的特点是不同的存储引擎支持不同的锁机制 MySQL InnoDB 锁机制官方文档 比如在 MyISAM、Memory 存…

如何用Taro打造敏捷的移动App架构

什么是Taro? Taro(或称为Taro框架)是一种用于构建跨平台应用程序的开源JavaScript框架。它基于React和React Native,可以用于开发Web、iOS、Android和微信小程序等平台上的应用程序。 Taro的目标是实现一套代码多端运行的方案&a…

CRF条件随机场的原理、例子、公式推导和应用

转子:https://zhuanlan.zhihu.com/p/148813079 条件随机场(Conditional Random Field,CRF)是自然语言处理的基础模型,广泛应用于中文分词、命名实体识别、词性标注等标注场景。 条件随机场CRF与深度学习结合&#xf…

MATLAB文化算法

目录 文化算法 主要代码 Sphere AdjustCulture 结果 文化算法 基本概念:优化算法 | 详解文化算法(附MATLAB代码) - 知乎 不同于遗传算法只有种群进化空间,文化算法包含信念空间、种群空间两个进化空间,因此&#…

[学习笔记] [机器学习] 11. EM算法(极大似然估计、EM算法实例、极大似然估计取对数的原因)

视频链接数据集下载地址:无需下载 学习目标: 了解什么是 EM 算法知道极大似然估计知道 EM 算法实现流程 讲 EM 算法主要是为了后面的 HMM 做准备。 1. 初始 EM 算法 EM 算法(Expectation-Maximization algorithm,期望最大化算法…

索引介绍和基本使用

介绍 索引就是用来加速SQL查询的 由于索引也是需要存储成索引文件的,因此对索引的使用也会涉及磁盘I/O操作。如果索引创建过多,使用不当,会造成SQL查询时,进行大量无用的磁盘I/O操作,降低了SQL的查询效率&#xff0c…

SaaS 系统完全开源介绍

🐯 平台简介 芋道,以开发者为中心,打造中国第一流的快速开发平台,全部开源,个人与企业可 100% 免费使用。 架构图 管理后台的 Vue3 版本采用 vue-element-plus-admin ,Vue2 版本采用 vue-element-admin 管…

MySQL数据库概念、管理以及SQL语句的基本命令操作

MySQL数据库概念、管理以及SQL语句的基本命令操作 一、数据库概念1、数据库的组成:数据、表、数据库2、数据库类型3、数据库的管理系统(DBMS)4、数据库系统(DBS) 二、数据库系统发展史三、当今主流数据库四、关系型数据库五、MySQ…

HTML+CSS实训——Day15——部署项目到阿里云服务器

前言 因为阿里云有免费的3个月试用,我们可以把项目部署到上面。 选择这个服务 我们用CentOS,更简单,更轻量化。 打开他的VNC控制台 安装宝塔控制面板,输入 yum install -y wget && wget -O install.sh https://downlo…

提高你的小程序开发技能:五大重要步骤

对于任何开发人员来说,想要创建一个小程序并不是一件容易的事情。你需要为每个功能和应用程序编写代码,并且你需要不断地进行测试以确保它不会出错。 那么,我们该如何提高小程序的开发技能呢?通过下面这五个重要步骤,…

Win10麦克风没有声音怎么办?Win10麦克风没有声音恢复教程

Win10麦克风没有声音怎么办?Win10电脑中用户发现麦克风没有声音了,想知道怎么操作才能让声音恢复正常,这时候用户需要打开Win10电脑的设备管理器,点击更新相对应的驱动程序,这样就能轻松解决Win10麦克风没有声音的问题…

Python 课程设计2:学生信息管理系统

开发环境要求 本系统的软件开发及运行环境具体如下。 操作系统:Windows 10。Python版本:Python 3.7.0。开发工具:PyCharm VSCodePython内置模块:os、re。 功能: 1 录入学生信息功能 …

大模型微调方法调研

文章目录 Freeze方法PT方法Lora方法AdaloraPrompt TuningAdapter TuningPrefix tuning遗留问题 Freeze方法 对原始模型部分参数进行冻结操作,仅训练部分参数 PT方法 P-Tuning,仅对大模型的Embedding加入新的参数。 P-Tuning 提出将 Prompt 转换为可以…

Cgroup资源管理

docker资源限制 容器怎么实现资源的限制? 通过Cgroup资源限制 docker 通过Cgroup来控制容器使用的资源配额,包括CPU,内存,磁盘三大方面。 Cgroup是linux内核提供的一种可以限制,记录,隔离进程组所使用的…

IDEA默认代码样式的坑,逗号前面默认加上了空格

IDEA默认代码样式的坑,逗号前面默认加上了空格 个人习惯编写完代码,会使用CTRLALTL进行代码格式化,同时设置了提交的时候进行代码重排和格式化。突然有一天,格式化代码之后发现跟仓库的差异文件几百个,吓死。。。 当然…

代码开发中VO,BO,PO,DO,DTO是什么

代码开发中VO,BO,PO,DO,DTO是什么 MVC的简单定义: M层负责与数据库打交道; C层负责业务逻辑的编写; V层负责给用户展示(针对于前后端不分离的项目,不分离项目那种编写…

一、微机保护装置的典型结构

微机型保护装置实质上是一种依靠单片微机智能地实现保护功能的工业控制装置。一般典型的微机保护结构是由五个部分构成的,即信号输入电路、单片微机系统、人机接口部分、输出通道回路及电源部分,如图1-l所示。 (一)信号…

多线程之基础

写在前面 本文看下多线程基础相关内容。 1:线程基础分析 1.1:摩尔定律失效 戈登.摩尔,英特尔公司的创始人之一,其发现了一个计算机的发展规律,即,处理器的性能每24个月就会翻一倍,这就是摩尔…

Vintage的变体与解读应用

Vintage在风险管理中有很多变体,通常分为以下四类: 1.根据选取切片数据时间不一样,可划分为Month end(月末)与Cycle end(期末)两种。 说明: **Month end:**选取切片数…

基于自适应高斯混合的稀疏注释语义分割

文章目录 Sparsely Annotated Semantic Segmentation with Adaptive Gaussian Mixtures摘要本文方法GMM FormulationTraining with AGMM 实验结果 Sparsely Annotated Semantic Segmentation with Adaptive Gaussian Mixtures 摘要 稀疏注释语义分割(SASS&#xf…