简述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!!如有问题,欢迎评论区批评指正😁
相关文章:
简述IO流的使用以及使用时需要注意的事项
Hi i,m JinXiang ⭐ 前言 ⭐ 本篇文章主要介绍介绍IO流的使用以及使用时需要注意的事项以及部分理论知识 🍉欢迎点赞 👍 收藏 ⭐留言评论 📝私信必回哟😁 🍉博主收将持续更新学习记录获,友友们有任何问题可…...
西工大计算机学院计算机系统基础实验一(函数编写11~14)
稳住心态不要慌,如果考试周冲突的话,可以直接复制这篇博客和上一篇博客西工大计算机学院计算机系统基础实验一(函数编写1~10)-CSDN博客最后的代码,然后直接提交,等熬过考试周之后回过头再慢慢做也可以。 第…...
Spring 声明式事务
Spring 声明式事务 1.Spring 事务管理概述1.1 事务管理的重要性1.2 Spring事务管理的两种方式1.2.1 编程式事务管理1.2.2 声明式事务管理 1.3 为什么选择声明式事务管理 2. 声明式事务管理2.1 基本用法2.2 常用属性2.2.1 propagation(传播行为)2.2.2 iso…...
通达OA inc/package/down.php接口存在未授权访问漏洞
声明 本文仅用于技术交流,请勿用于非法用途 由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任。 一. 产品简介 通达OA(Office Anywhere网络智能办公系统&am…...
数据库原理: 笛卡儿积
笛卡儿积(Cartesian Product)是集合论中的一个概念,也在数据库中的查询操作中经常使用。笛卡儿积是指两个集合(或更多集合)之间所有可能的组合。如果有两个集合A和B,它们的笛卡儿积记作A B,表示…...
docker安装配置prometheus+node_export+grafana
简介 Prometheus是一套开源的监控预警时间序列数据库的组合,Prometheus本身不具备收集监控数据功能,通过获取不同的export收集的数据,存储到时序数据库中。Grafana是一个跨平台的开源的分析和可视化工具,将采集过来的数据实现可视…...
【JavaScript】JS——Map数据类型
【JavaScript】JS——Map数据类型 什么是Map?特性Map与Object的比较 map的创建map的属性map相关方法map的遍历 什么是Map? 存储键值对的对象。 能够记住键的原始插入顺序任何值(对象或原始值)都可以作为键或值。 特性 Map中的一个键只能出现一次&am…...
【【FPGA的 MicroBlaze 的 介绍与使用 】】
FPGA的 MicroBlaze 的 介绍与使用 可编程片上系统(SOPC)的设计 在进行系统设计时,倘若系统非常复杂,采用传统 FPGA 单独用 Verilog/VHDL 语言进行开发的方式,工作量无疑是巨大的,这时调用 MicroBlaze 软核…...
PyQt pdf格式保存
参考文章 pyqt5:利用QFileDialog从本地选择图片\文本文档显示到label、保存图片\label文本到本地(附代码)_pyqt5中qfiledialog.getopenfileurl-CSDN博客 txt文件的打开与保存 def openTextFile(self): # 选择文本文件上传fd,fp QFileDialog.getOpen…...
微前端介绍
目录 微前端概念 微前端特性 场景演示 微前端方案 iframe 方案 qiankun 方案 micro-app 方案 EMP 方案 无界微前端 方案 无界方案 成本低 速度快 原生隔离 功能强大 总结 前言:微前端已经是一个非常成熟的领域了,但开发者不管采用哪个现…...
工业机器视觉megauging(向光有光)使用说明书(一,轻量级的visionpro)
机器视觉megauging(未名之光,向光有光)程序软件资源已经发布,欢迎下载尝新 8:11 2023/12/2 首先,既然觉得可以发表了,就发表。 其次,我这个人没写过什么软件使用说明书,既然走到这路…...
Java——面试:String 和 StringBuffer 的区别?
相同点: String 和 StringBuffer,它们可以储存和操作字符串, 即包含多个字符的字符数据。 String 和 StringBuffer 的区别有以下几点: 1.String 类提供了数值不可改变的字符串。而 StringBuffer 类提供的字符串进行修改。 当你知…...
图扑软件受邀出席高交会-全球清洁能源创新博览会
“相聚鹏城深圳,共享能源盛宴” 第二十五届中国国际高新技术成果交易会(简称“高交会”)于 11 月 15-18 日在深圳盛大开幕。高交会由商务部、科学技术部、工业和信息化部、国家发展改革委、农业农村部、国家知识产权局、中国科学院、中国工程院和深圳市人民政府共同…...
vue项目下npm或yarn下安装echarts多个版本
最近在大屏展示的时候,用到了百度的echarts图表库,看完效果图后,又浏览了一下echarts官网案例,大同小异。但是搬砖过程中发现实际效果和demo相差甚远,一番折腾发现,项目中安装的是echarts4.x版本࿰…...
在内网开发中使用Nginx代理来访问钉钉新版服务端API
如果你在内网开发中使用Nginx代理来访问钉钉新版服务端API,你可以在Nginx配置文件中进行相应的配置。 以下是一个简单的示例Nginx配置,用于将对指定URL的请求代理到钉钉服务端API: server { listen 80; server_name your_server_domain; l…...
机器学习算法如何进行特征重要性评估
特征重要性评估是机器学习中一种常用的方法,用于确定输入特征对模型预测的贡献程度。以下是几种常见的机器学习算法进行特征重要性评估的方法: 1 决策树算法(如随机森林和梯度提升树):决策树算法可以通过计算每个特征…...
运行启动vue项目报报错node: --openssl-legacy-provider is not allowed in NODE_OPTIONS解决
报错的问题就是package.json中的Scripts下的dev 解决方法就是要不升级你的应用代码,支持 新版本的node.js 要不就是删除SET NODE_OPTIONS--openssl-legacy-provider &&代码,如下代码即可正常运行起来...
网工学习5 交换机端口相关配置
交换机的接口属性默认支待一般网络环境,一般情况下是不需要对其接口进行设置的。在某些情况下需 要对其端口属性进行配置时,配置的对象主要有接口隔离、速率、双工等信息。 5.1 接口隔离设置 > 配置接口 GE0/0/1 和 GE0/0/2 的接口隔离功能…...
使用Pytorch从零开始实现CLIP
生成式建模知识回顾: [1] 生成式建模概述 [2] Transformer I,Transformer II [3] 变分自编码器 [4] 生成对抗网络,高级生成对抗网络 I,高级生成对抗网络 II [5] 自回归模型 [6] 归一化流模型 [7] 基于能量的模型 [8] 扩散模型 I, 扩散模型 II…...
Java网络编程 *TCP与UDP协议*
网络编程 什么是计算机网络? 把分布在不同地理区域的具有独立功能的计算机,通过通信设备与线路连接起来,由功能完善的软件实现资源共享和信息传递的系统 简单来说就是把不同地区的计算机通过设备连接起来,实现不同地区之前的数据传输 网络编程是干什么的? 网络…...
conda相比python好处
Conda 作为 Python 的环境和包管理工具,相比原生 Python 生态(如 pip 虚拟环境)有许多独特优势,尤其在多项目管理、依赖处理和跨平台兼容性等方面表现更优。以下是 Conda 的核心好处: 一、一站式环境管理:…...
Ubuntu系统下交叉编译openssl
一、参考资料 OpenSSL&&libcurl库的交叉编译 - hesetone - 博客园 二、准备工作 1. 编译环境 宿主机:Ubuntu 20.04.6 LTSHost:ARM32位交叉编译器:arm-linux-gnueabihf-gcc-11.1.0 2. 设置交叉编译工具链 在交叉编译之前&#x…...
深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
React hook之useRef
React useRef 详解 useRef 是 React 提供的一个 Hook,用于在函数组件中创建可变的引用对象。它在 React 开发中有多种重要用途,下面我将全面详细地介绍它的特性和用法。 基本概念 1. 创建 ref const refContainer useRef(initialValue);initialValu…...
Cloudflare 从 Nginx 到 Pingora:性能、效率与安全的全面升级
在互联网的快速发展中,高性能、高效率和高安全性的网络服务成为了各大互联网基础设施提供商的核心追求。Cloudflare 作为全球领先的互联网安全和基础设施公司,近期做出了一个重大技术决策:弃用长期使用的 Nginx,转而采用其内部开发…...
C# 类和继承(抽象类)
抽象类 抽象类是指设计为被继承的类。抽象类只能被用作其他类的基类。 不能创建抽象类的实例。抽象类使用abstract修饰符声明。 抽象类可以包含抽象成员或普通的非抽象成员。抽象类的成员可以是抽象成员和普通带 实现的成员的任意组合。抽象类自己可以派生自另一个抽象类。例…...
EtherNet/IP转DeviceNet协议网关详解
一,设备主要功能 疆鸿智能JH-DVN-EIP本产品是自主研发的一款EtherNet/IP从站功能的通讯网关。该产品主要功能是连接DeviceNet总线和EtherNet/IP网络,本网关连接到EtherNet/IP总线中做为从站使用,连接到DeviceNet总线中做为从站使用。 在自动…...
docker 部署发现spring.profiles.active 问题
报错: org.springframework.boot.context.config.InvalidConfigDataPropertyException: Property spring.profiles.active imported from location class path resource [application-test.yml] is invalid in a profile specific resource [origin: class path re…...
华硕a豆14 Air香氛版,美学与科技的馨香融合
在快节奏的现代生活中,我们渴望一个能激发创想、愉悦感官的工作与生活伙伴,它不仅是冰冷的科技工具,更能触动我们内心深处的细腻情感。正是在这样的期许下,华硕a豆14 Air香氛版翩然而至,它以一种前所未有的方式&#x…...
HashMap中的put方法执行流程(流程图)
1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中,其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下: 初始判断与哈希计算: 首先,putVal 方法会检查当前的 table(也就…...
