Java_IO流学习

IO流

概念

I – in – 输入(读)

O – out – 输出(写)

流 – 一点一点的像水流一样去传输数据

注意:站在程序的角度去看待输入还是输出

分类

按照方向分流:输入流、输出流

按照单位分流:字节流、字符流

按照功能分流:基础流/节点流、处理流

注意:new 处理流(new 基础流) – 装饰者模型 – 处理流对象中往往包含了基础流的对象,在基础流的基础上拓展了额外的功能,使得流更为强大(效率),工作中一般使用处理流

存储单位

1024byte = 1KB

1024KB = 1MB

1024MB = 1GB

1024GB = 1TB

1024TB = 1PB

注意:进制1024

学习注意事项

  1. 按照流的发展历史去学习
  2. 注意流与流之间的继承关系
  3. 举一反三

字节流

应用场景:操作二进制数据(音频、视频、图片)

abstract class InputStream – 字节输入流的基类(抽象类)

abstract class OutputStream – 字节输出流的基类(抽象类)

class FileInputStream extends InputStream – 文件字节输入流

class FileOutputStream extends OutputStream – 文件字节输出流

class FilterInputStream extends InputStream – 过滤器字节输入流

class FilterOutputStream extends OutputStream – 过滤器字节输出流

class BufferedInputStream extends FilterInputStream – 带缓冲区的字节输入流

class BufferedOutputStream extends FilterOutputStream – 带缓冲区的字节输出流

默认缓冲区大小:8192字节 - new byte[8192]

字符流

应用场景:操作纯文本数据

注意:字符流 = 字节流+编译器

编译器:可以识别中文字符和非中文字符,非中文字符获取1个字节(一个字节=一个字符),编译器会根据编码格式获取中文字符对应的字节数(GBK获取两个字节,UTF-8获取三个字节)

abstract class Reader – 字符输入流的基类(抽象类)

abstract class Writer – 字符输出流的基类(抽象类)

class InputStreamReader extends Reader – 字符输入转换流

class OutputStreamWriter extends Writer – 字符输出转换流

特点:将字节流转换为字符流,字符转换流是字节流和字符流的桥梁

class FileReader extends InputStreamReader – 文件字符输入流

class FileWriter extends OutputStreamWriter – 文件字符输出流

class BufferedReader extends Reader – 带缓冲区的字符输入流

class BufferedWriter extends Writer – 带缓冲区的字符输出流

默认缓冲区:8192字符 – new char[8192]

各种流

对象流

class ObjectInputStream – 对象输入流

class ObjectOutputStream – 对象输出流

理解:

​ 将程序中的对象写入到文件

​ 并且从文件中读取出对象到程序里

序列化(钝化):将程序里的对象写入到文件

反序列化(活化):将文件里的对象读取到程序中

注意:

  1. 如果对象想写入文件,对象所属的类就必须实现序列化接口(Serializable)
  2. Serializable序列化接口没有任何的属性和方法,这种接口称之为标记型接口
  3. 对象所属的类实现了序列化接口一定要添加序列化ID(serialVersionUID)
  4. 属性使用transient修饰,该属性不会随着对象而写入到文件中

内存流

class ByteArrayInputStream – 内存输入流

class ByteArrayOutputStream – 内存输出流

注意:

  1. 内存流是程序和内存交互,跟文件无关
  2. 内存流是程序到内存的通道,是关闭不掉的

应用场景:项目中频繁使用的数据可以使用内存流备份一份

打印流

class PrintStream – 字节打印流

class PrintWriter – 字符打印流

注意:打印流实际上就是输出流,只有一个方向(程序->文件)

PrintStream vs PrintWriter

区别1:PrintStream是以字节为单位,PrintWriter是以字符为单位

区别2:

​ PrintStream:将字节流转换为字节打印流

​ PrintWriter:将字节流和字符流转换为字符打印流

重定向

理解:重新定义系统标准的输入流、输出流、错误输出流的方向

System.in:获取系统标准输入流的方向(控制台->程序)
System.out:获取系统标准输出流的方向(程序->控制台)
System.err:获取系统标准错误输出流的方向(程序->控制台)

//重定向:重新定义系统标准输入流的方向(文件->程序)
System.setIn(new FileInputStream(“io.txt”));

//重定向:重新定义系统标准输出流的方向(程序->文件)
System.setOut(new PrintStream(new FileOutputStream(“io.txt”,true)));

//重定向:重新定义系统标准错误输出流的方向(程序->文件)
System.setErr(new PrintStream(new FileOutputStream(“io.txt”,true)));

随机访问流

class RandomAccessFile

理解:该流认为文件是一个大型的byte数组。有一个隐藏的指针(默认为0),其实就是下标,可以从指针的位置写入或读取,意味着该流两个方向

模式:r-读,rw-读写

提升作业:

流的大类:BIO、NIO、AIO

学习NIO和AIO,制作md文档,其中包含概念、理解和代码

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

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

相关文章

R语言:单细胞pcoa降维和去批次

#生成随机颜色 > randomColor <- function() { paste0("#",paste0(sample(c(0:9, letters[1:6]), 6, replace TRUE),collapse "")) } # 生成100个随机颜色 > randomColors <- replicate(100,randomColor()) > seuratreadRDS("seu…

RAG系统(四)手撕基于向量检索的 RAG

RAG系统&#xff08;一&#xff09;系统介绍与向量检索 RAG系统&#xff08;二&#xff09;文档的加载与分段 RAG系统&#xff08;三&#xff09;向量数据库 完整代码需要依赖前边三章中的代码&#xff0c;本节主要展示整合后的RAG系统&#xff0c;及运行示例。 from MyVec…

前端javascript包管理,npm升级用pnpm

一 pnpm 介绍 pnpm&#xff08;Package Manager&#xff09;是一个快速、节省磁盘空间的 JavaScript 包管理器&#xff0c;它是 Node.js 生态系统中 npm 的一个替代品。pnpm 解决了传统包管理工具在处理依赖时的一些痛点&#xff0c;特别是关于存储空间使用和依赖地狱的问题。…

如何将Google Search Console添加到WordPress和GA4

您想知道如何将 Google Search Console 添加到您的 Google Analytics 帐户和 WordPress 网站吗&#xff1f; 作为网站主&#xff0c;Google Search Console 是一款不能不使用的工具。对于任何想要确保其网站在 Google 搜索结果中表现良好的人来说&#xff0c;这绝对是一个必不…

leetCode-hot100-数组专题之区间问题

数组专题之区间问题 知识点&#xff1a;解决思路&#xff1a;例题56.合并区间57.插入区间253.会议室 Ⅱ485.无重叠区间 数组区间问题是算法中常见的一类问题&#xff0c;它们通常涉及对数组中的区间进行排序、合并、插入或删除操作。无论是合并区间、插入区间还是删除重复空间&…

【HarmonyOS尝鲜课】- 下载、安装DevEco Studio以及配置环境、创建运行HarmonyOS项目

下载、安装开发工具 进入DevEco Studio下载官网&#xff0c;单击“立即下载”进入下载页面。 这里以Windows为例进行安装&#xff0c;可以根据操作系统选择对应的版本进行下载。 下载完成后解压一下&#xff0c;进入文件里&#xff0c;双击应用程序&#xff0c;打开安装向导&a…

Redis主从、哨兵、集群讲解

一、Redis主从 大家在面试中可能经常会被问到Redis的高可用问题。Redis高可用回答包括两个层面&#xff0c;一个就是数据不能丢失&#xff0c;或者说尽量减少丢失 ;另外一个就是保证Redis服务不中断 。 对于尽量减少数据丢失&#xff0c;可以通过AOF和RDB保证。 对于保证服务…

2024年中青杯数学建模思路+建模过程+视频讲解

A 题&#xff1a;人工智能视域下养老辅助系统的构建 随着全球人口老龄化的加剧&#xff0c;养老问题已经成为一个世界性的社会问题。它不仅 关系到每个家庭、每个个体的未来福祉&#xff0c;也关系到国家的社会稳定和可持续发展。根 据联合国的相关数据显示&#xff0c;全球 65…

linux---线程控制

线程和进程 以前我们要同时跑多个程序&#xff0c;可以通过fork()多个子进程&#xff0c;然后通过系统函数进行程序的替换&#xff0c;但是创建进程代价大&#xff0c;不仅要拷贝一份父进程的地址空间&#xff0c;页表&#xff0c;文件表述符表等。但是线程不需要因为是进程的…

搜索引擎新特性与未来展望

多元化大模型支持: 本搜索引擎具备卓越的兼容性和灵活性,支持多种大模型(LLMs)。无论是本地部署的llama3、gemma、mistral等模型,还是云服务提供的OpenAI/gpt4-o、Groq/Llama3等,都能轻松接入,为用户提供丰富的智能搜索体验。现代化技术栈构建: 项目采用业界领先的Next…

windows docker desktop 更换镜像存储目录

windows docker desktop 更换镜像存储目录 方法&#xff1a;如图&#xff0c;Browse浏览一个新的目录并选中&#xff0c;确定后&#xff0c;程序会开始stop&#xff0c;在stop完成前&#xff0c;会持续迁移原有镜像到新的位置&#xff0c;你会发现目标位置的磁盘占用空间越来越…

Mac网线连接windows本【局域网互传文件】

Mac网线连接windows本【局域网互传文件】 两台电脑网线互联 Mac->网络->USP TCP/IP 手动配置IP&#xff0c;子网掩码&#xff0c;路由器 windows 网络和Internet配置->更改适配器选项->以太网->Internet协议版本4&#xff08;TCP/IPv4&#xff09;->属性 …

K8S/ hpa分享

在 Kubernetes 中&#xff0c;HorizontalPodAutoscaler 自动更新工作负载资源 &#xff08;例如 Deployment 或者 StatefulSet&#xff09;&#xff0c; 目的是自动扩缩工作负载以满足需求。 hpa的使用本身还是很简单的 示例如下&#xff1a; 官网示例 apiVersion: apps/v1 k…

NetCore发布的时候怎么去除生成的多余的语言文件夹cs,de...,Microsoft.CodeAnalysis语言资源文件

1、问题&#xff1a; .NetCore 3.1 发布出来的publish目录一大堆杂七杂八的文件夹如下图&#xff1a; 2、产生原因 由Microsoft.VisualStudio.Web.CodeGeneration.Design包导致 3、解决方法&#xff1a; 如果确实需要某种语言资源文件&#xff0c;可以这样&#xff0c;右键编…

压摆率SR、增益带宽积GBP、开环增益Aol

运放的选型对运放电路的实际效果非常关键&#xff0c;一定要理解运放重要参数的概念。下面几天将对运放的选型进行系统学习并做实验 运放的压摆率&#xff08;Slew Rate&#xff0c;简称SR&#xff09;是指闭环放大器在输入为阶跃信号时&#xff0c;输出电压时间变化率的平均值…

vue打包部署到springboot,通过tomcat运行

tomcat默认端口 8080springboot端口 9132vue 端口 9131 框架 项目是基于SpringBootVue前后端分离的仓库管理系统 后端&#xff1a;SpringBoot MybatisPlus前端&#xff1a;Node.js Vue element-ui数据库&#xff1a;mysql 一. 打包Vue项目 cmd中输入命令 npm run build 后…

深度学习之基于YoloV5-Deepsort人物识别与追踪项目

欢迎大家点赞、收藏、关注、评论啦 &#xff0c;由于篇幅有限&#xff0c;只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景与目标 本项目旨在利用深度学习技术&#xff0c;结合YoloV5和Deepsort算法&#xff0c;开发一个高效、…

前端:音频可视化(H5+js版本)

一、效果展示 HTML5JS实现一个简单的音频可视化 二、代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><title>音频可视化</title><style></style></head><body><divs…

非平稳信号的傅里叶变换与短时傅里叶变换

一、仿真一个非平稳的时间序列。 N 10000; t 0:N-1; z1 4.2*sin(2*pi/20.*t5); z2 2.2*sin(2*pi/100.*(10.001*t).*t8); w1 randn(length(t),1); yz1z2w1; figure;plot(y,LineWidth,1.5);grid on; ylabel(Signal); xlabel(Time); 二、傅里叶变换&#xff08;FFT&#xff…

教育智能化的历史及发展趋势

1. 教育智能化概述 1.1 定义与背景 教育智能化是指利用人工智能、大数据、云计算等现代信息技术&#xff0c;对教育过程进行智能化改造&#xff0c;提升教育质量与效率。随着技术进步&#xff0c;教育智能化已成为全球教育改革的重要趋势。 教育智能化的背景可以追溯到20世纪…