简述IO流的使用以及使用时需要注意的事项

Hi i,m JinXiang


⭐ 前言 ⭐

本篇文章主要介绍介绍IO流的使用以及使用时需要注意的事项以及部分理论知识


🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁

🍉博主收将持续更新学习记录获,友友们有任何问题可以在评论区留言


目录

⭐什么IO流?

⭐IO流的分类

⭐IO流的作用

⭐使用IO流

一、使用IO流的步骤

二、使用IO流注意事项


⭐什么IO流?(i:input  o:output)

IO流(输入/输出流)是Java程序中用于读写数据的机制。

Java程序中的所有输入数据都是从输入流中读取的,所有输出数据都是通过输出流写入的。IO流可分为字节流和字符流。字节流读取和写入的是字节,字符流读取和写入的是字符。 常见的IO类包括InputStream、OutputStream、Reader和Writer。

⭐IO流的分类

在Java中,IO流可以分为以下两种类型:

1. 字节流(Byte Stream):以字节为单位进行读写操作的流。字节流主要涉及InputStream和OutputStream两个抽象类及其子类,用于读取和写入二进制数据。

2. 字符流(Character Stream):以字符为单位进行读写操作的流。字符流主要涉及Reader和Writer两个抽象类及其子类,用于读取和写入文本数据。

其中,字节流和字符流又可以分为输入流和输出流两种类型,共计四种类型:

1. InputStream:字节输入流,用于从输入源中读取字节数据。

2. OutputStream:字节输出流,用于向输出目标写入字节数据。

3. Reader:字符输入流,用于从输入源中读取字符数据。

4. Writer:字符输出流,用于向输出目标写入字符数据。

在实际应用中,要根据数据的类型和读写方式选择合适的流类型,例如,如果需要读取文本文件,可以使用FileReader来读取文件内容;如果要写入二进制数据到文件中,则可以使用FileOutputStream来实现。

⭐IO流的作用

IO流的主要作用是实现数据的输入和输出。在Java程序中,数据源可以是文件、网络连接、内存等。使用IO流可以从这些数据源中读取数据,或将数据输出到这些数据源中。

具体来说,IO流的作用如下:

1、读取和写入文件:可以使用IO流实现对文件的读取和写入,从而进行文件读写操作。

2、网络通信:Java程序可以通过IO流进行网络通信,例如通过Socket对象建立网络连接,通过IO流进行数据传输。

3、键盘输入和屏幕输出:可以使用IO流实现对用户的键盘输入和屏幕输出。

4、内存操作:IO流还可以用于内存操作,例如读取字节数组或字符数组等。

5、序列化:Java中的序列化(Serialization)就是通过IO流实现的,将对象转换成字节流进行存储或传输。

总之,IO流是Java程序中常用的一个功能模块,它为Java程序提供了灵活、高效的数据输入和输出方式,广泛应用于文件操作、网络通信、输入输出控制等领域。

⭐使用IO流

一、使用IO流的步骤

1、选择合适的IO流类型:Java中提供了各种类型的IO流,例如字节流和字符流、输入流和输出流、文件流和缓冲流等。根据需要选择合适的IO流类型。

2、创建IO流对象:在使用IO流之前,需要创建相应的IO流对象。例如,如果要读取文件,可以创建FileInputStream对象;如果要写入文件,可以创建FileOutputStream对象。

3、打开IO流:在创建IO流对象之后,需要调用相应的方法打开IO流。例如,调用FileInputStream对象的read()方法读取文件中的数据。

4、处理数据:打开IO流后,就可以读取或写入数据了。读取数据可以使用read()或readLine()等方法,写入数据可以使用write()或print()等方法。

5、关闭IO流:在读取或写入数据之后,需要关闭IO流。关闭IO流可以使用close()方法。在关闭IO流之前,需要保证所有的数据都已处理完毕。

例如,以下代码使用FileInputStream和BufferedInputStream读取文件中的数据:

import java.io.*;public class ReadFile {public static void main(String[] args) {try {// 创建FileInputStream对象FileInputStream fis = new FileInputStream("test.txt");// 创建BufferedInputStream对象BufferedInputStream bis = new BufferedInputStream(fis);// 读取数据int data;while ((data = bis.read()) != -1) {System.out.print((char) data);}// 关闭流bis.close();fis.close();} catch (IOException e) {e.printStackTrace();}}
}

以上是使用IO流的基本步骤和示例,使用IO流时需要注意保证数据的正确性和流的关闭。

二、使用IO流注意事项

在使用IO流时,需要注意以下几个事项:

1. 不要忘记关闭流:在使用完IO流之后,需要关闭流以释放资源。如果不关闭流,会导致资源的浪费或者程序异常。

2. 应该使用try-with-resources语句:Java 7中引入了try-with-resources语句,可以自动关闭资源,避免手动关闭流的麻烦。例如:

   try (FileInputStream fis = new FileInputStream("file.txt")) {// 使用流进行读写操作} catch (IOException e) {e.printStackTrace();}

3. 不要忘记刷新缓冲区:在使用BufferedWriter、PrintWriter等带有缓冲的流时,需要注意及时刷新缓冲区,否则可能会导致数据丢失。

4. 不要忘记异常处理:在使用IO流时,可能会发生IOException异常,需要捕获并处理。一般来说,可以选择直接抛出异常或者在程序中进行处理。

5. 字符集的问题:在使用字符流读取或写入文件时,需要注意文件的字符集,否则可能会出现中文乱码等问题。可以在创建InputStreamReader或OutputStreamWriter对象时指定字符集。

6. 不要在写入文件时使用追加模式:在使用FileOutputStream时,可能会使用追加模式来写入文件,这种方式会在文件末尾添加新的数据。但是,在追加模式下,写入的数据可能会与之前的数据重复,导致数据不符合预期。因此,在写入文件时,应该使用覆盖模式来确保文件的正确性。

总之,使用IO流时需要谨慎对待,并遵循一些规范来确保程序的正确性和稳定性。
 

总结不易,希望uu们不要吝啬亲爱的👍哟(^U^)ノ~YO!!如有问题,欢迎评论区批评指正😁

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

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

相关文章

程序员都在收藏的免费好用API接口

AI绘画-Mid Journey:使用 Midjourney 目前全球领先的图片大模型,其能根据输入文字提供极其优秀的AI绘画作品。AI绘画-Stable Diffusion:通过AI 生成图片,包括图生文、文生图等。IP归属地-IPv4区县级:根据IP地址查询归属…

11月榜单丨飞瓜数据B站UP主排行榜(哔哩哔哩平台)发布!

飞瓜轻数发布2023年11月飞瓜数据UP主排行榜(B站平台),通过充电数、涨粉数、成长指数、带货数据等维度来体现UP主账号成长的情况,为用户提供B站号综合价值的数据参考,根据UP主成长情况用户能够快速找到运营能力强的B站U…

Linux Console快捷键

Ctrl C:终止当前正在运行的程序。 Ctrl D:关闭当前终端会话。 Ctrl Z:将当前程序放入后台运行。 Ctrl L:清除当前屏幕并重新显示命令提示符。 Ctrl R:在历史命令中进行逆向搜索。 Ctrl A:将光标移动到…

java--泛型方法、通配符、上下限

1.泛型方法 2.通配符 就是"?",可以在"使用泛型"的时候代表一切类型;E T K V是在定义泛型的时候使用。 3.泛型的上下限 ①泛型上限:? extends Car:? 能接收的必须是Car或者其子类 ②泛型下限&#xff1…

ubuntu安装MySQL8

1.下载mysql8 MySQL :: Download MySQL Installer (Archived Versions) 选择对应的mysql版本和对应的ubuntu版本图即可 2.下载后上传到sftp文件夹中,然后通过以下命令解压 tar -xvf mysql-server_8.0.29-1ubuntu20.04_amd64.deb-bundle.tar 3.依次安装即可 &#…

Auth的使用、缓存

auth 是什么,有什么作用 auth就是django 的一个app,做用户管理 Auth模块是Django自带的用户认证模块: 我们在开发一个网站的时候,无可避免的需要设计实现网站的用户系统。此时我们需要实现包括用户注册、用户登录、用户认证、注销…

Sql Server 2017主从配置之:AlwaysOn高可用

AlwaysOn高可用功能,真正实现了数据库的灾备切换、高可用。 AlwaysOn通过Windows Server故障转移群集,部署高可用数据库组。 在故障转移群集基础上完成部署读写分离,只读负载平衡最多3个写入节点实现故障转移最多3个数据实时同步节点 环境…

西门子SMART精彩触摸屏如何在进入某个画面时置位某个BOOL变量?

西门子SMART精彩触摸屏如何在进入某个画面时置位某个BOOL变量? 以下举例进行说明具体的操作: 如下图所示,新建一个项目后,在变量表中添加好自己需要的变量; 添加一个画面,这里以“画面_1”进行举例说明&…

数据库事务详解

事务特性:acid;aid为了实现c 原子性:一个事务要么全执行,要么全不执行-》回滚 sqlite是备份 其他是失败执行语义的反向操作-》算法 一致性: 完整性约束在一个事务执行后没有被破坏:主键约束,外键约束,自…

【链表Linked List】力扣-24 两两交换链表中的节点

目录 题目描述 解题过程 题目描述 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换)。 示例 1: 输入:he…

【1day】致远A6系统任意文件下载漏洞学习

注:该文章来自作者日常学习笔记,请勿利用文章内的相关技术从事非法测试,如因此产生的一切不良后果与作者无关。 目录 一、漏洞描述 二、影响版本 三、资产测绘 四、漏洞复现

安科瑞智慧型动态无功补偿的工业应用—— 以江苏某陶瓷生产企业配电房改造为例

安科瑞电气股份有限公司 摘 要:低压配电系统的无功补偿是电能质量治理的重要环节。在传统无功补偿中,响应速度较慢,补偿电流呈阶梯式,存在过补或欠补的现象,有时未必能到达理想的效果。为了解决这一问题,…

二极管:ESD静电保护二极管

一、什么是ESD二极管 ESD二极管与 TVS二极管原理是一样的,也是为了保护电,但ESD二极管的主要功能是防止静电。 静电防护的前提条件就要求其电容值要足够地低,一般在1PF-3.5PF之间最好,主要应用于板级保护。 二、什么是静电 静…

软件科技成果鉴定测试有什么好处?注意事项有哪些?

软件科技成果鉴定测试是指对软件科技成果进行检测和评估的过程。通过这个测试,可以评估软件科技成果的技术水平、功能性能以及可靠性,并为相关单位和个人提供科学的评价依据。    一、进行软件科技成果鉴定测试有以下好处:   1、客观评价…

什么?你还不会 OpenTiny 跨框架组件库适配微前端?

本文由体验技术团队 TinyVue 组件库成员陈家梅同学分享,带你手把手实现 TinyVue 组件库适配微前端~ 一、前言 以下是我对微前端的一些粗浅理解,对微前端有一定了解的话可以略过,直接进入第二部分。 1、微前端是什么? 我们首先…

AI智能批量写作的工具,免费AI智能写作工具

文本创作成为各行业不可或缺的一环。然而,随着信息量的急剧增长,传统的手工写作方式已经难以满足大规模文本需求。AI智能批量写作作为一项前沿技术,本文将深入探讨AI智能批量写作的方法,介绍一些知名的工具,并对它们进…

东南大学与OpenHarmony携手共建开源生态,技术俱乐部揭牌成立并迎来TSC专家进校园

11月25日,OpenAtom OpenHarmony(以下简称“OpenHarmony”)项目群技术指导委员会(以下简称“TSC”)与东南大学携手,于东南大学九龙湖校区金智楼一楼报告厅举办了“东南大学OpenHarmony技术俱乐部成立仪式暨OpenHarmony TSC专家进校园”活动。此次盛会标志着OpenHarmony开源社区和…

【android开发-17】android中SQLite数据库CRUD详细介绍

1,SQLite数据库读写的操作步骤 在Android中,对SQLite数据库的操作主要包括以下步骤: 1,创建数据库:首先,您需要创建一个SQLite数据库。这可以通过在Android项目中创建一个新的类来实现,该类继…

十年前端之离别的旋律

在一家名叫“梦想家”的小公司里,有一个普通的程序员,他的名字叫做小帅。每天默默地坐在角落里,默默地写着代码,默默地为公司付出。他的眼睛里总是充满了对工作的热爱和对生活的热情,但他的内心却隐藏着一个秘密&#…

Qt之QGraphicsView —— 笔记1.2:将QGraphicsView放置主窗口上,绘制简单图元(附完整源码)

效果 相关类介绍 QGraphicsView类提供了一个小部件,用于显示QGraphicsScene的内容。QGraphicsView在可滚动视口中可视化。QGraphicsView将滚动其视口,以确保该点在视图中居中。 QGraphicsScene类 提供了一个用于管理大量二维图形项的场景。请注意,QGraphicsScene没有自己的视…