【从入门到起飞】IO高级流(1)(缓冲流,转换流,序列化流,反序列化流)

🎊专栏【JavaSE】
🍔喜欢的诗句:天行健,君子以自强不息。
🎆音乐分享【如愿】
🎄欢迎并且感谢大家指出小吉的问题🥰

文章目录

  • 🎄缓冲流
    • 🍔字节缓冲流
      • 🛸一次读取一个字节
      • 🛸一次读取多个字节
    • 🍔字符缓冲流
  • 🎄转换流
    • 🍔利用转换流按照指定的字符编码读取数据
    • 🍔利用转换流按照指定的字符编码写入数据
    • 🍔读写结合,使用转换流读取数据并且写入数据,并且转换编码方式
      • 🛸乱码的解决方法
  • 🎄序列化流(对象操作输出流)
    • 🍔写出一个对象
      • 🛸创建类Student.java
      • 🛸创建类Demo1.java
  • 🎄反序列化流(对象操作输入流)
    • 🌺小练习——读写多个对象
      • 🛸创建类Student.java
      • 🛸创建类Write.Java
      • 🛸创建类Read.Java
        • 🎈结果

在这里插入图片描述

🎄缓冲流

在这里插入图片描述

在代码中使用缓冲流(Buffered Streams)有许多好处,特别是在处理I/O操作时,它们可以显著提高性能和效率。缓冲流是一种在内存中创建缓冲区的I/O流,可以将数据暂时存储在缓冲区中,然后一次性地进行批量读取或写入,而不是每次操作都直接与底层数据源(如文件、网络套接字等)交互。

🍔字节缓冲流

原理:底层自带了长度为8192的缓冲区来提高性能

请添加图片描述
在创建对象的时候还是使用原来的基本流,但是在缓冲流的加持下,提高了基本流读写的效率

🛸一次读取一个字节

package IODemo1;import java.io.*;public class Demo2 {public static void main(String[] args) throws IOException {//创建缓冲流对象BufferedInputStream bis=new BufferedInputStream(new FileInputStream("G:\\a.txt"));BufferedOutputStream bos=new BufferedOutputStream(new FileOutputStream("G:\\copy.txt"));//循环读写到目的地int b;while ((b=bis.read())!=-1){bos.write(b);}bos.close();bis.close();}}

在这里插入图片描述

🛸一次读取多个字节

package IODemo1;import java.io.*;public class Demo2 {public static void main(String[] args) throws IOException {//创建缓冲流对象BufferedInputStream bis = new BufferedInputStream(new FileInputStream("G:\\a.txt"));BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("G:\\copy.txt"));//循环读写到目的地byte[] bytes = new byte[1024];int len;while ((len = bis.read(bytes)) != -1) {bos.write(bytes, 0, len);}//释放资源bos.close();bis.close();}}

在这里插入图片描述

🍔字符缓冲流

在这里插入图片描述
在这里插入图片描述

为什么文件有三行数据,但是读出的只有一行呢
因为readline在读取的时候,一次只读一整行,读到回车换行符结束

如何把文件全部都读出来

package IODemo1;import java.io.*;public class Demo2 {public static void main(String[] args) throws IOException {BufferedReader br=new BufferedReader(new FileReader("G:\\a.txt"));String line;while (((line=br.readLine())!=null)){System.out.println(line);}br.close();}}

在这里插入图片描述

🎄转换流

转换流是字符流和字节流之间的桥梁
在这里插入图片描述

🍔利用转换流按照指定的字符编码读取数据

读取数据

在这里插入图片描述

🍔利用转换流按照指定的字符编码写入数据

写入数据

在这里插入图片描述

🍔读写结合,使用转换流读取数据并且写入数据,并且转换编码方式

读写结合

在这里插入图片描述

🛸乱码的解决方法

字节流读取中文会出现乱码,那么我们就要使用字符流
在这里插入图片描述

🎄序列化流(对象操作输出流)

可以把Java中的对象写到本地文件中
在这里插入图片描述

🍔写出一个对象

🛸创建类Student.java

package IODemo2;import java.io.Serializable;public class Student implements Serializable {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

注意
这里要加上Serializable接口
在这里插入图片描述

🛸创建类Demo1.java

package IODemo2;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;public class Demo1 {public static void main(String[] args) throws IOException {//创建对象Student stu=new Student("zhangsan",23);//创建序列化流的对象ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("G:\\a.txt"));//写出数据oos.writeObject(stu);//释放资源oos.close();}}

🎄反序列化流(对象操作输入流)

可以把序列化到本地文件中的对象,读取到程序中来
在这里插入图片描述

package IODemo2;import java.io.FileInputStream;
import java.io.IOException;
import java.io.ObjectInputStream;public class Demo2 {public static void main(String[] args) throws IOException, ClassNotFoundException {//创建反序列化流的对象ObjectInputStream ois=new ObjectInputStream(new FileInputStream("G:\\a.txt"));//读取数据Object o=ois.readObject();//打印对象System.out.println(o);//释放资源ois.close();}
}

读取成功
在这里插入图片描述

🌺小练习——读写多个对象

注意是多个对象

🛸创建类Student.java

package IODemo2;import java.io.Serializable;public class Student implements Serializable {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}
}

🛸创建类Write.Java

package IODemo2;import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.ArrayList;public class Write {public static void main(String[] args) throws IOException {Student s1 = new Student("zhangsan", 23);Student s2 = new Student("lisi", 24);Student s3 = new Student("wangwu", 25);ArrayList<Student> list = new ArrayList<>();list.add(s1);list.add(s2);list.add(s3);ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("G:\\a.txt"));oos.writeObject(list);}
}

🛸创建类Read.Java

package IODemo2;import java.io.*;
import java.util.ArrayList;public class Read {public static void main(String[] args) throws IOException, ClassNotFoundException {ObjectInputStream ois=new ObjectInputStream(new FileInputStream("G:\\a.txt"));ArrayList<Student>list=(ArrayList<Student>) ois.readObject();//强转for (Student student:list){System.out.println(student);}ois.close();}
}
🎈结果

一定要先写再读
先执行Write.java
再执行Read.java

在这里插入图片描述

如果大家对于这篇文章有问题,欢迎在评论区进行讨论

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

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

相关文章

【通意千问】大模型GitHub开源工程学习笔记(1)--依赖库

9月25日&#xff0c;阿里云开源通义千问140亿参数模型Qwen-14B及其对话模型Qwen-14B-Chat,免费可商用。 立马就到了GitHub去fork。 GitHub&#xff1a; GitHub - QwenLM/Qwen: The official repo of Qwen (通义千问) chat & pretrained large language model proposed b…

协议栈——收发数据(拼接网络包,自动重发,滑动窗口机制)

目录 协议栈何时发送数据&#xff5e; 数据长度 IP模块的分片功能 发送频率 网络包序号&#xff5e;利用syn拼接网络包ack确认网络包完整 确定偏移量 服务器ack确定收到数据总长度 序号作用 双端告知各自序号 协议栈自动重发机制 大致流程 ack等待时间如何调整 是…

Leetcode202. 快乐数

力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为&#xff1a; 对于一个正整数&#xff0c;每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1&#xff0…

【单片机】13-实时时钟DS1302

1.RTC的简介 1.什么是实时时钟&#xff08;RTC&#xff09; &#xff08;rtc for real time clock) &#xff08;1&#xff09;时间点和时间段的概念区分 &#xff08;2&#xff09;单片机为什么需要时间点【一定的时间点干什么事情】 &#xff08;3&#xff09;RTC如何存在于…

Redis中Hash类的操作

Redis中Hash类型是键值对的形式保存数据&#xff0c;其中键被称为字段&#xff08;field&#xff09;&#xff0c;值称为字段值&#xff08;value&#xff09;。在一个key中&#xff0c;字段不能重复&#xff0c;而值可以重复。无论是字段还是值都是无序的&#xff08;保存的次…

Java 大厂八股文面试专题-JVM相关面试题 垃圾回收算法 GC JVM调优

Java 大厂八股文面试专题-JVM相关面试题 类加载器_软工菜鸡的博客-CSDN博客 3 垃圾收回 3.1 简述Java垃圾回收机制&#xff1f;&#xff08;GC是什么&#xff1f;为什么要GC&#xff09; 难易程度&#xff1a;☆☆☆ 出现频率&#xff1a;☆☆☆ 为了让程序员更专注于代码的实现…

【Flink】

事件驱动型应用 核心目标&#xff1a;数据流上的有状态计算 Apache Flink是一个框架和分布式处理引擎&#xff0c;用于对无界或有界数据流进行有状态计算。 运行逻辑 状态 把流处理需要的额外数据保存成一个“状态”,然后针对这条数据进行处理,并且更新状态。这就是所谓的“…

MySQL explain SQL分析工具详解与最佳实践

目录 一、explain工具介绍二、添加示例表和数据用于后续演示三、explain中的列3.1、id列3.2、select_type列3.3、table列3.4、partitions列3.5、type列NULLsystemconsteq_refrefrangeindexALL 3.6、possible_keys列3.7、key列3.8、key_len列3.9、ref列3.10、rows列3.11、filter…

HDFS最基础使用

文章目录 一、简介1、定义2、HDFS优缺点3、HDFS组成架构4、HDFS文件块大小 二、HDFS的读写流程1、HDFS写数据流程2、HDFS读数据流程3、网络拓扑-节点距离计算4、机架感知&#xff08;副本存储节点选择&#xff09; 三、NameNode和SecondaryNameNode1、NN和2NN工作机制2、Fsimag…

Linux关于gittee的远端仓库的连接和git三板斧

目录 1.网页操作 2.Linux操作 查看Linux系统中是否安装git指令 安装git指令 链接远端仓库 设置 .gitignore文件 3.git三板斧 1.网页操作 首先我们要在gittee建立一个仓库 这是我自己的勾选方案&#xff0c;大家可以参考一下。 这个方案勾选最下面的三个选项才有&#x…

java图书管理系统

一、 引言 图书管理系统是一个用于图书馆或书店管理图书信息、借阅记录和读者信息的应用程序。本系统使用Java Swing框架进行开发&#xff0c;提供直观的用户界面&#xff0c;方便图书馆管理员或书店工作人员对图书信息进行管理。以下是系统的设计、功能和实现的详细报告。 二…

最新整理源码面试题

经典框架源码面试题 Lecture&#xff1a;波哥 1.谈谈你对框架的理解 1.1 框架的作用 JavaWeb中的框架是一种开发工具或者平台&#xff0c;它提供了一系列的功能和组件&#xff0c;用于简化和加速Web应用的开发过程。框架可以提供一些基础设施&#xff0c;如数据库访问、用户认…

ISP图像信号处理——白平衡校正和标定介绍以及C++实现

从数码相机直接输出的未经过处理过的RAW图到平常看到的JEPG图有一系列复杂的图像信号处理过程&#xff0c;称作ISP&#xff08;Image Signal Processing&#xff09;。这个过程会经过图像处理和压缩。 参考文章1&#xff1a;http://t.csdn.cn/LvHH5 参考文章2&#xff1a;htt…

基于蜉蝣优化的BP神经网络(分类应用) - 附代码

基于蜉蝣优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码 文章目录 基于蜉蝣优化的BP神经网络&#xff08;分类应用&#xff09; - 附代码1.鸢尾花iris数据介绍2.数据集整理3.蜉蝣优化BP神经网络3.1 BP神经网络参数设置3.2 蜉蝣算法应用 4.测试结果&#xff1a;5.M…

AAD基础知识(identity/token/PRT)

简介 AAD(Azure Active Directory/Azure AD)是微软基于云身份验证和访问控制的解决方案&#xff0c;通过SSO登录其他o365应用(word/outlook/teams…) 微软在2023年7月把AAD重命名为Microsoft Entra ID&#xff0c;官网&#xff1a;https://www.microsoft.com/zh-cn/security/b…

【多任务案例:猫狗脸部定位与分类】

【猫狗脸部定位与识别】 1 引言2 损失函数3 The Oxford-IIIT Pet Dataset数据集4 数据预处理4 创建模型输入5 自定义数据集加载方式6 显示一批次数据7 创建定位模型8 模型训练9 绘制损失曲线10 模型保存与预测 1 引言 猫狗脸部定位与识别分为定位和识别&#xff0c;即定位猫狗…

通过 HelpLook ChatBot AI自动问答机器人降低客户服务成本

在当今竞争激烈的商业环境中&#xff0c;提供卓越的客户服务对于维持忠诚的客户群和推动业务增长至关重要。客户服务涵盖了公司与其客户之间的所有互动&#xff0c;包括解答问题、解决问题和提供支持。它在塑造客户对品牌的看法方面起着关键作用&#xff0c;并且可以显著影响他…

C语言判断语句

判断结构要求程序员指定一个或多个要评估或测试的条件&#xff0c;以及条件为真时要执行的语句&#xff08;必需的&#xff09;和条件为假时要执行的语句&#xff08;可选的&#xff09;。 C 语言把任何非零和非空的值假定为 true&#xff0c;把零或 null 假定为 false。 下面…

react create-react-app v5 从零搭建(使用 npm run eject)

前言&#xff1a; 好久没用 create-react-app做项目了&#xff0c;这次为了个h5项目&#xff0c;就几个页面&#xff0c;决定自己搭建一个&#xff08;ps:mmp 好久没用&#xff0c;搭建的时候遇到一堆问题&#xff09;。 我之前都是使用 umi 。后台管理系统的项目 使用 antd-…

DevExpress ChartControl 画间断线

效果如下&#xff1a; 解决办法&#xff1a;数据源间断位置加入double.NaN demo下载