当前位置: 首页 > news >正文

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 输出依次如下&#xff1a; #include<iostream> #include<vector> #include<string>using namespace std;/* 字符分割函数 将传入…...

mysql的查询操作

MySQL的查询操作是数据库管理和数据检索的核心。通过SQL&#xff08;Structured Query Language&#xff0c;结构化查询语言&#xff09;语句&#xff0c;用户可以执行包括数据检索、数据插入、更新和删除在内的多种操作。在本文中&#xff0c;我们将重点讨论数据检索&#xff…...

0基础学前端 day2

大家好&#xff0c;欢迎来到无限大的频道。 今天继续带领大家开始0基础学前端。 一、CSS简介与基础 层叠样式表&#xff08;CSS&#xff0c;Cascading Style Sheets&#xff09;是用来进行网页样式和布局设计的语言。通过CSS&#xff0c;开发者可以控制网页中元素的颜色、字体…...

Invalid Executable The executable contains bitcode

Invalid Executable The executable contains bitcode xcode世界xcode16后&#xff0c;打包上传testflight时三方库报错&#xff1a;Invalid Executable - The executable ***.app/Frameworks/xxx.framework/xxx contains bitcode. 解决方案&#xff1a; 执行一下指令删除该f…...

音视频入门基础:FLV专题(4)——使用flvAnalyser工具分析FLV文件

一、引言 有很多工具可以分析FLV格式&#xff0c;这里推荐flvAnalyser。其支持&#xff1a; 1.FLV 文件分析&#xff08;Tag 列表、时间戳、码率、音视频同步等&#xff09;&#xff0c;HEVC(12)/AV1(13) or Enhanced RTMP v1 with fourCC(hvc1/av01)&#xff1b; 2.RTMP/HTT…...

Java服务端开发中的网络安全:防护DDoS与数据泄露的策略

Java服务端开发中的网络安全&#xff1a;防护DDoS与数据泄露的策略 大家好&#xff0c;我是微赚淘客返利系统3.0的小编&#xff0c;是个冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;在Java服务端开发中&#xff0c;网络安全是我们必须重点关注的领域&#xff0c…...

CodeMeter 8.20AxProtector 11.50版本更新

CodeMeter是一款强大的软件保护和许可管理工具&#xff0c;此次8.20版本更新引入了多个重要的新功能和优化&#xff0c;进一步提升了不同平台上的兼容性与使用体验。本次更新扩展了对CmCloudContainer的支持&#xff0c;优化了Python、Rust等语言的加密能力&#xff0c;并修复了…...

C语言在嵌入式系统中的应用有哪些?

C语言在嵌入式系统中的应用非常广泛&#xff0c;这主要得益于其高效的运行速度、优秀的代码优化能力以及丰富的函数库。以下是C语言在嵌入式系统应用中的几个关键方面&#xff1a; 1. 硬件直接访问能力 底层硬件操作&#xff1a;C语言提供了直接访问底层硬件的机制&#xff0…...

Android 系统WIFI AP模式

在 Android 系统中&#xff0c;AP 模式&#xff08;Access Point Mode&#xff0c;热点模式&#xff09;允许设备作为 Wi-Fi 热点&#xff0c;其他设备可以通过连接这个热点进行互联网访问或局域网通信。要让 Android 设备工作在 AP 模式&#xff0c;你可以通过应用层的 API 控…...

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器的上位机配置操作说明

LBE-LEX系列工业语音播放器|预警播报器|喇叭蜂鸣器专为工业环境精心打造&#xff0c;完美适配AGV和无人叉车。同时&#xff0c;集成以太网与语音合成技术&#xff0c;为各类高级系统&#xff08;如MES、调度系统、库位管理、立库等&#xff09;提供高效便捷的语音交互体验。 L…...

挑战杯推荐项目

“人工智能”创意赛 - 智能艺术创作助手&#xff1a;借助大模型技术&#xff0c;开发能根据用户输入的主题、风格等要求&#xff0c;生成绘画、音乐、文学作品等多种形式艺术创作灵感或初稿的应用&#xff0c;帮助艺术家和创意爱好者激发创意、提高创作效率。 ​ - 个性化梦境…...

C++初阶-list的底层

目录 1.std::list实现的所有代码 2.list的简单介绍 2.1实现list的类 2.2_list_iterator的实现 2.2.1_list_iterator实现的原因和好处 2.2.2_list_iterator实现 2.3_list_node的实现 2.3.1. 避免递归的模板依赖 2.3.2. 内存布局一致性 2.3.3. 类型安全的替代方案 2.3.…...

智慧医疗能源事业线深度画像分析(上)

引言 医疗行业作为现代社会的关键基础设施,其能源消耗与环境影响正日益受到关注。随着全球"双碳"目标的推进和可持续发展理念的深入,智慧医疗能源事业线应运而生,致力于通过创新技术与管理方案,重构医疗领域的能源使用模式。这一事业线融合了能源管理、可持续发…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误

HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误&#xff0c;它们的含义、原因和解决方法都有显著区别。以下是详细对比&#xff1a; 1. HTTP 406 (Not Acceptable) 含义&#xff1a; 客户端请求的内容类型与服务器支持的内容类型不匹…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】

微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来&#xff0c;Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

Java入门学习详细版(一)

大家好&#xff0c;Java 学习是一个系统学习的过程&#xff0c;核心原则就是“理论 实践 坚持”&#xff0c;并且需循序渐进&#xff0c;不可过于着急&#xff0c;本篇文章推出的这份详细入门学习资料将带大家从零基础开始&#xff0c;逐步掌握 Java 的核心概念和编程技能。 …...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库&#xff0c;例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体&#xff0c;比如 SnowballFight、Huggy the Do…...