IO(输入输出流)
1.IO
a.介绍
i.IO是指Input和Output,即输入和输出,以内存为中心:
1.Input是指从外部读入数据到内存。
2.Output是指把数据从内存输出到外部。
ii.IO流是一种顺序读写数据的模式,它的特点是单向流动。数据类似自来水一样在水管中流动,所以我们把它称为IO流。
b.InputStream/OutputStream
i.IO流以byte(字节)为最小单位,因此也称为字节流。
ii.InputStream代表输入字节流,OutputStream代表输出字节流,这是最基本的两种IO流。
c.Reader/Writer
i.以char(字符)为最小数据单位来读写,这种称为字符流。
ii.Reader和Writer本质上是一个能自动编解码的InputStream和OutputStream。
d.同步和异步
i.同步IO是指,读写IO时代码必须等待数据返回后才继续执行后续代码。优点:代码编写简单;缺点:CPU执行效率低。
ii.异步IO是指,读写IO时仅发出请求,然后立刻执行后续代码。优点:CPU执行效率高,缺点:代码编写复杂。
2.File
a.File对象
i.文件是非常重要的存储方式。Java标准库java.io提供了File对象来操作文件和目录。
ii.构建File对象时,需要传入文件路径:可以是绝对路径,也可以是相对路径。
iii.Windows平台使用 \ 作为路径分隔符,在Java中需要用 \\ 表示一个 \ 。Linux平台用 / 作为分隔符路径。
iv.可以用 . 表示当前目录,用 .. 表示上级目录。
v.File对象有3种形式表示的路径,getPath():返回构造方法传入的路径;getAbsoluteFile():返回绝对路径;getCanonicalFile():返回规范路径。

b.文件和目录
i.File对象既可以表示文件也可以表示目录。构建File对象时,并不会对磁盘做任何操作,调用File对象的某些方法时,才真正进行磁盘操作。
c.创建和删除文件
i.当File对象表示一个文件时,可以通过createNewFile()方法创建一个新文件,用delete()删除该文件。

d.Path
i.Java标准库还提供了一个Path对象,位于java.nio.file包。
ii.如果需要对目录进行复杂的拼接、遍历等,使用Path对象更方便。

3.InputStream
a.简介
i.Java库提供的最基本的输入流。
ii.不是接口,是抽象类,是所有输入流的超类。
iii.int read()方法:会读取输入流的下一个字节,并返回字节的int值,如果读到末尾,返回-1表示不能继续了。
iv.在计算机中,类似文件、网络端口这些资源,都是由操作系统统一管理的。应用程序在运行过程中,打开文件需要及时关闭,以便让操作系统及时释放资源。
v.InputStream和OutputStream都是通过close()方法关闭流,关闭流就会释放对应的底层资源。

vi.try(resource)的语法,编译器会自动关闭资源。实际上,编译器并不会特地为InputStream加上自动关闭, 编译器只看try(recource=...)中的对象是否实现了java.lang.AutoCloseable接口,实现了,就自动加上finally语句并调用close()方法。

b.缓冲
i.在读取流时,一次读取一个字节效率低,很多流支持一次性读取多个字节到缓冲区,利用缓冲区一次性读取多个字节效率就高很多。
ii.两个方法
1.int read(byte[] b):读取若干字节并填充到byte[]数组,返回读取的字节数。
2.int read(byte[] b, int off, int len):指定byte[]数组的偏移量和最大填充数。
iii.一次读取多个字节,需要先定义一个byte[]数组作为缓冲区,read()方法会尽可能多的读取字节到缓冲区,但不会超过缓冲区的大小。

c.阻塞
i.调用InputStream的read()方法读取数据时,read()方法是阻塞的,即必须等read()方法返回后才能继续。读取IO流比执行普通代码,速度慢很多。
d.InputStream实现类
i.ByteArrayInputStream:把一个byte[]数组在内存中变成一个InputStream。

4.OutputStream
a.简介
i.Java标准库提供的最基本的输出流。
ii.不是接口,是抽象类,所有输出流的超类。
iii.void write(int b)方法:虽然是int参数,但是只会写入一个字节到输出流。
iv.提供了flush()方法,它的目的是将缓冲区的内容真正输出到目的地。
1.出于效率考虑,操作系统并不是一个个字节输出,而是把输出的字节放到内存缓冲区(本质上是一个byte[]数组),等待缓冲区写满,一次性写入文件或网络。一次写1个字节和一次写1000个字节时间几乎一样,flush()方法能够强制把缓冲区内容输出。
2.通常情况下,不需要我们调用,缓冲区写满后、close()方法关闭前,OutputStream会自动调用flush()方法。
3.某些情况下,需要我们手动调用flush()方法来强制输出缓冲区。
b.FileOutputStream
i.文件输出流,从内存输出内容到外部。
ii.一次性写入若干字节,调用write(byte[])来实现。
iii.try(resource)来保证OutputStream在无论是否发生IO错误的时候都能正确关闭资源。

c.阻塞
i.调用OutputStream的write()方法时,write()方法是阻塞的,即必须等write()方法返回后才能继续。输出IO流比执行普通代码,速度慢很多。
d.OutputStream实现类
i.ByteArrayOutputStream:把一个byte[]数组在内存中变成一个OutputStream。
ii.同时操作多个AutoCloseable资源时,在try(resource){...}语句中可以同时写出多个资源,用;隔开。

相关文章:
IO(输入输出流)
1.IO a.介绍 i.IO是指Input和Output,即输入和输出,以内存为中心: 1.Input是指从外部读入数据到内存。 2.Output是指把数据从内存输出到外部。 ii.IO流是一种顺序读写数据的模式,它的特点是单向流动。数据类似自…...
python爬虫:从12306网站获取火车站信息
代码逻辑 初始化 (init 方法): 设置请求头信息。设置车站版本号。 同步车站信息 (synchronization 方法): 发送GET请求获取车站信息。返回服务器响应的文本。 提取信息 (extract 方法): 从服务器响应中提取车站信息字符串。去掉字符串末尾的…...
Android个性名片界面的设计——约束布局的应用
节选自《Android应用开发项目式教程》,机械工业出版社,2024年7月出版 做最简单的安卓入门教程,手把手视频、代码、答疑全配齐 【任务目标】 使用约束布局、TextView控件实现一个个性名片界面的设计,界面如图1所示。 图1 个性名片…...
Python 课程18-SQLAlchemy
前言 SQLAlchemy 是一个功能强大的 Python SQL 工具包和对象关系映射(ORM)库,它使得开发者能够通过 Python 代码与数据库进行交互,而不必编写 SQL 查询。SQLAlchemy 提供了对多种数据库的支持,包括 MySQL、PostgreSQL…...
Module did not self-register: ‘drivelist.node‘报错解决
报错如下: node_modules/bindings/bindings.js:121throw e;^Error: Module did not self-register: xxxx/node_modules/drivelist/build/Release/drivelist.node.at process.func [as dlopen] (electron/js2c/asar.js:140:31)at Object.Module._extensions..node (…...
zabbix基本概念与组件
文章目录 一、zabbix简介二、zabbix构成三、zabbix监控对象四、zabbix常用术语五、 Zabbix 6.0 新特性1.Zabbix server高可用防止硬件故障或计划维护期的停机2.Kubernetes系统从多个维度采集指标 六、zabbix 工作原理1、主动模式2、…...
Linux常用网络工具及示例
Linux系统中有许多用于网络管理、监控和故障排除的工具。以下是一些常用的网络工具及其基本用法示例: 1. ping - 测试主机之间的网络连接。 ping www.google.com 2. netstat - 显示网络连接、路由表、接口统计等信息。 netstat -an # 显示所有网络连接和监听…...
Go容器化微服务系统实战
1-1 本课的go微服务有什么不同? 聚焦于容器化可观测的购物微服务系统实战,通过介绍Go语言的应用趋势、容器化优势及微服务适用性,旨在解决学习微服务过程中遇到的难点。课程内容涵盖微服务整体架构、技术工具框架及容器平台等关键技术&#…...
研究生三年概括
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、研一1.上学期2. 下学期 二、研二1.研二上2.研二下 三、研三1.研三上2.研三下 前言 不知道是谁说的了,人生的路很长,关键的就那么几…...
MongoDB在Linux系统中的安装与配置指南
在这篇文章中,我们将介绍如何在CentOS 7服务器上安装MongoDB,并通过DataX将数据从MongoDB迁移到MySQL数据库。这将包括MongoDB的安装、配置、数据准备以及使用DataX进行数据迁移的详细步骤。 MongoDB简介 MongoDB是一个高性能、开源、无模式的文档型数据…...
Linux下如何实现不用加路径调用启动脚本
配置Systemctl启动 Linux下便于启停服务,可以配置systemcl,配置如下描述 说明 只有root用户可配置,文件路径为 /etc/systemd/system/XXX.service,本文将用nginx.service举例说明 1、创建文件 首先创建一个nginx.service文件,用于配置ngi…...
编程练习2 数据单元的变量替换
示例1: 1,2<A>00 示例2: 1,2<A>00,3<A>00 示例3: <B>12,1,2<B>1 示例4: <B<12,1 输出依次如下: #include<iostream> #include<vector> #include<string>using namespace std;/* 字符分割函数 将传入…...
mysql的查询操作
MySQL的查询操作是数据库管理和数据检索的核心。通过SQL(Structured Query Language,结构化查询语言)语句,用户可以执行包括数据检索、数据插入、更新和删除在内的多种操作。在本文中,我们将重点讨论数据检索ÿ…...
0基础学前端 day2
大家好,欢迎来到无限大的频道。 今天继续带领大家开始0基础学前端。 一、CSS简介与基础 层叠样式表(CSS,Cascading Style Sheets)是用来进行网页样式和布局设计的语言。通过CSS,开发者可以控制网页中元素的颜色、字体…...
Invalid Executable The executable contains bitcode
Invalid Executable The executable contains bitcode xcode世界xcode16后,打包上传testflight时三方库报错:Invalid Executable - The executable ***.app/Frameworks/xxx.framework/xxx contains bitcode. 解决方案: 执行一下指令删除该f…...
音视频入门基础:FLV专题(4)——使用flvAnalyser工具分析FLV文件
一、引言 有很多工具可以分析FLV格式,这里推荐flvAnalyser。其支持: 1.FLV 文件分析(Tag 列表、时间戳、码率、音视频同步等),HEVC(12)/AV1(13) or Enhanced RTMP v1 with fourCC(hvc1/av01); 2.RTMP/HTT…...
Java服务端开发中的网络安全:防护DDoS与数据泄露的策略
Java服务端开发中的网络安全:防护DDoS与数据泄露的策略 大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java服务端开发中,网络安全是我们必须重点关注的领域,…...
CodeMeter 8.20AxProtector 11.50版本更新
CodeMeter是一款强大的软件保护和许可管理工具,此次8.20版本更新引入了多个重要的新功能和优化,进一步提升了不同平台上的兼容性与使用体验。本次更新扩展了对CmCloudContainer的支持,优化了Python、Rust等语言的加密能力,并修复了…...
C语言在嵌入式系统中的应用有哪些?
C语言在嵌入式系统中的应用非常广泛,这主要得益于其高效的运行速度、优秀的代码优化能力以及丰富的函数库。以下是C语言在嵌入式系统应用中的几个关键方面: 1. 硬件直接访问能力 底层硬件操作:C语言提供了直接访问底层硬件的机制࿰…...
Android 系统WIFI AP模式
在 Android 系统中,AP 模式(Access Point Mode,热点模式)允许设备作为 Wi-Fi 热点,其他设备可以通过连接这个热点进行互联网访问或局域网通信。要让 Android 设备工作在 AP 模式,你可以通过应用层的 API 控…...
装饰模式(Decorator Pattern)重构java邮件发奖系统实战
前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...
基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
Vue2 第一节_Vue2上手_插值表达式{{}}_访问数据和修改数据_Vue开发者工具
文章目录 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染2. 插值表达式{{}}3. 访问数据和修改数据4. vue响应式5. Vue开发者工具--方便调试 1.Vue2上手-如何创建一个Vue实例,进行初始化渲染 准备容器引包创建Vue实例 new Vue()指定配置项 ->渲染数据 准备一个容器,例如: …...
对WWDC 2025 Keynote 内容的预测
借助我们以往对苹果公司发展路径的深入研究经验,以及大语言模型的分析能力,我们系统梳理了多年来苹果 WWDC 主题演讲的规律。在 WWDC 2025 即将揭幕之际,我们让 ChatGPT 对今年的 Keynote 内容进行了一个初步预测,聊作存档。等到明…...
Mac下Android Studio扫描根目录卡死问题记录
环境信息 操作系统: macOS 15.5 (Apple M2芯片)Android Studio版本: Meerkat Feature Drop | 2024.3.2 Patch 1 (Build #AI-243.26053.27.2432.13536105, 2025年5月22日构建) 问题现象 在项目开发过程中,提示一个依赖外部头文件的cpp源文件需要同步,点…...
ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...
Python 包管理器 uv 介绍
Python 包管理器 uv 全面介绍 uv 是由 Astral(热门工具 Ruff 的开发者)推出的下一代高性能 Python 包管理器和构建工具,用 Rust 编写。它旨在解决传统工具(如 pip、virtualenv、pip-tools)的性能瓶颈,同时…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
【JVM面试篇】高频八股汇总——类加载和类加载器
目录 1. 讲一下类加载过程? 2. Java创建对象的过程? 3. 对象的生命周期? 4. 类加载器有哪些? 5. 双亲委派模型的作用(好处)? 6. 讲一下类的加载和双亲委派原则? 7. 双亲委派模…...
