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

IO流简介

一、什么是IO流

        IO流中的IO指的是单词Input和Output的首字母,这两个单词的意思在程序当中就是输入和输出的意思。所以,IO流用我们的话来说就是程序中的输入和输出操作。那么程序中的输入和输出分别指什么意思呢?

        输入对应的就是程序当中的读取操作。这里要将程序作为参考体,也就是说当执行一个程序的时候,如果需要从这个程序之外的文件中获取数据的话,那么这个获取外部数据的过程就是读取操作,也就是Input操作,即输入流。这里要说明的是,这个所谓的外部数据是指除了本程序之外的文件当中的数据,并不局限于本机或者本机之外的数据源。就是说,在一台执行程序的计算机中,程序获取在此计算机中的不属于本程序自带的数据是读取操作,获取其他计算机中的数据也是数据的读取操作。

        输出流和输入流一样,也是相对于程序来说的。当执行一个程序时,程序的运行结果往往需要进行输出,不论是将其作为其他程序的运行条件还是将这个数据进行保存,这个数据都需要进行一个”离开程序“的操作,即向别的硬件或者软件进行输出。这个操作叫做数据的写入操作。

二、数据源

        数据源不能简单的理解为数据的来源,因为IO流包含了数据的输入和输出两个部分,所以数据源应该理解为数据的来源和去处。常见的数据源有数据库、其他程序、文件、内存、网络连接以及IO设备。根据在IO流中充当的角色不同,这些数据源又可以分为源设备和目标设备。源设备指的是为程序提供数据的设备,一般对应的是输入流;目标设备指的是程序数据的目的地,一般对应的是输出流。要强调的是,数据源的分类并不是死的,一个数据源在不同的程序中可能是目标设备,也有可能是源设备。比如对于同一个文件来说,当程序1要从这个文件中获取相关数据的时候它对于程序1来说就是源设备,但如果另一个程序2要向这个文件中写入数据,那么对于程序2来说这个文件就是目标设备。因此,要区分一个数据源是源设备还是目标设备,首先得分清是是对哪个程序来说的,离开了程序谈数据源的分类是没有意义的。

三、流

        在上面的介绍中我们反复提及了一个概念——流。可是对于什么是流,还没有进行系统的介绍。这里首先要说一下水流和信息流的关系。水流自然不必多说,相比大家都是清楚的。那么什么是信息流呢?信息其实就是数据,因此信息流某种程度上也可以叫做数据流。在传输信息也就是数据的时候呢,为了方便理解便引用了流的概念建立了一个类似水流的数据模型用来描述数据的传输。我们把不同的设备之间的数据传输看作是在不同的设备之间建立了一个特殊的通道,在这个通道中流淌着一中特殊的”液体“——数据。这样一想,流的概念就比较清晰了。所以IO流也可以描述成以程序为中心的用来从其他设备获取或者输出数据的的流。

四、java中的四大IO抽象类

        java中的IO抽总类有很多,但它们都是四大IO抽象类——InputStream/OutputStream和Reader/Writer的子类。这个四个IO抽象类被分为了两组,分别对应了IO流中的输入流和输出流。其中InputStream/OutputStream对应的是字节输入流和字节输出流,而Reader/Writer对应的是字符输入流和字符输出流。

        1、InputStream字节输入流

        InputStream输入流是所有字节输入流的抽象父类,它不可以被实例化,所以要实现文件的读取操作就要实例化它的子类对象。InputStream输入流的所有子类都用于向程序输入数据,并且字节单位都为8bit。

        在InputStream输入流中有两个方法 read方法和close方法。其中read方法的作用是读取一个字节数据,并将这个字节数据的值作为int类型返回,如果没有读到数据,则返回值-1。而close方法的作用就是关闭对应的输入流对象,释放系统的资源避免资源的浪费。

        2、OutputStream字节输出流

        OutputStream字节输出流也是所有字节输出流的抽象父类。它定义的功能就是接收输出字节把那个且将这些字节发送到一个指定的目的地去。这个抽象类中也有两个write和close,write方法的作用就是向指定的目的地中写入一个字节,这方法没有返回值。而write方法的作用和InputStream中的close方法的作用一样,用于关闭字节输出流,释放系统资源避免资源浪费。

        3、Reader字符输入流

        Reader是用于读取的字符流抽象类,数据单位为一个字符。在这个抽象类中描述了两个方法,分别是read和close,read方法用于读取一个字符数据并将这个字符数据作为int类型进行返回。如果没有读取到数据,那么这方法将返回值-1。close方法用于关闭对应的字符输入流,释放被占用的系统资源,避免资源浪费。

        4、Writer字符输出流

        Writer字符输出流对应OutputStream字节输出流,它定义的功能也是将数据向数据源进行输出,不过输出的单位是字符。在Writer字符输出流中定义了连个放发,一个是writer,另一个是close。close方法的作用和以上介绍的三个IO流里的close方法一致。对于writer方法,它定义的功能也能很容易理解,就是向数据源发送以字符为单位的数据流。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【学习笔记】决策单调性优化DP
  • 抖音上传视频模糊怎么办?模糊视频怎么变高清?
  • 【华为战报】2024年7月 HCIA-HCIP-HCIE考试,通过率100%
  • Vue3实战案例 知识点全面 推荐收藏 超详细 及附知识点解读
  • 教你轻松搞定磁盘分区
  • 端口及对应服务
  • 【单片机毕业设计选题24095】-基于手机端的电池电压采集系统
  • 【一对一模型讲解】SABO-Transformer-LSTM多变量回归预测(减法平均算法)
  • LeetCode题练习与总结:第N高的薪水--177
  • 蓝桥杯 Python 研究生组-2023-省赛-工作时长
  • 【传输层协议】UDP和TCP协议
  • 3年亏11亿元,博泰车联网没沾上汽车智能化的光?
  • 互联网医院系统源码与医保购药APP开发的完整技术指南
  • 常见离线语音识别模块功能说明——天问ASR;机芯智能;海凌科;轻语音
  • 【AI绘画】fal/AuraFlow-v0.2出现 delete the irrelevant ones 错误
  • 【笔记】你不知道的JS读书笔记——Promise
  • 【刷算法】求1+2+3+...+n
  • 【跃迁之路】【585天】程序员高效学习方法论探索系列(实验阶段342-2018.09.13)...
  • HTML中设置input等文本框为不可操作
  • jquery cookie
  • js递归,无限分级树形折叠菜单
  • Koa2 之文件上传下载
  • PHP那些事儿
  • Vim Clutch | 面向脚踏板编程……
  • webpack项目中使用grunt监听文件变动自动打包编译
  • 理清楚Vue的结构
  • 入职第二天:使用koa搭建node server是种怎样的体验
  • 三栏布局总结
  • 手写一个CommonJS打包工具(一)
  • 我感觉这是史上最牛的防sql注入方法类
  • 白色的风信子
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • ​flutter 代码混淆
  • ​比特币大跌的 2 个原因
  • # 再次尝试 连接失败_无线WiFi无法连接到网络怎么办【解决方法】
  • (10)工业界推荐系统-小红书推荐场景及内部实践【排序模型的特征】
  • (3) cmake编译多个cpp文件
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (Forward) Music Player: From UI Proposal to Code
  • (二十九)STL map容器(映射)与STL pair容器(值对)
  • (分享)一个图片添加水印的小demo的页面,可自定义样式
  • (附源码)springboot高校宿舍交电费系统 毕业设计031552
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (四)js前端开发中设计模式之工厂方法模式
  • (新)网络工程师考点串讲与真题详解
  • (转载)PyTorch代码规范最佳实践和样式指南
  • (转载)微软数据挖掘算法:Microsoft 时序算法(5)
  • (自适应手机端)行业协会机构网站模板
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • *算法训练(leetcode)第四十七天 | 并查集理论基础、107. 寻找存在的路径
  • .htaccess配置重写url引擎
  • .NET Compact Framework 多线程环境下的UI异步刷新
  • .Net(C#)自定义WinForm控件之小结篇
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)