Java IO流:基本概念

2023-12-13 20:44:19

一、IO 概念

?I/O 即输入 Input/ 输出 Output 的缩写,其实就是计算机调度把各个存储中(包括内存和外部存储)的数据写入写出的过程;

?java 中用 “流(stream)” 来抽象表示这么一个写入写出的功能,封装成一个 “类”,都放在 java.io 这个包里面。

二、IO 流的分类

通过 “流” 的形式允许 java 程序使用相同的方式来访问不同的输入 / 输出源。stream 是从起源(source)到接收的(sink)的有序数据。我们这里把输入 / 输出源对比成 “水桶”,那么流就是 “管道”,这个 “管道” 的粗细、单向性等属性也就是区分了不同 “流” 的特性。

按照 流的方向 进行分类:
以内存作为参照物:

往内存中去:叫做输入 (Input)。或者叫做读 (Read)。

?

从内存中出来:叫做输出 (Output)。或者叫做写 (Write)。?

?

按照 读取数据方式 不同进行分类:
按照 字节 的方式读取数据,一次读取 1 个字节 byte,等同于一次读取 8 个二进制位。
这种流是万能的,什么类型的文件都可以读取。包括:文本文件,图片,声音文件,视频文件 等…

按照 字符 的方式读取数据的,一次读取一个字符。
这种流是为了方便读取普通文本文件而存在的,这种流不能读取:图片、声音、视频等文件。只能读取纯文本文件,连 word 文件都无法读取。

注意:
纯文本文件,不单单是.txt 文件,还包括 .java、.ini、.py 。总之只要 能用记事本打开 的文件都是普通文本文件。

eg.
假设文件file1.txt,采用字符流的话是这样读的:
a中国bc张三fe
第一次读:'a’字符('a’字符在windows系统中占用1个字节。)
第二次读:'中’字符('中’字符在windows系统中占用2个字节。)

?综上所述:流的分类:

  • 输入流、输出流
  • 字节流、字符流

根据传输数据单位分为字节流和字符流

  • 字节流:以字节为单元,可操作任何数据(由 InputStream 和 outPutStream 作为基类)
  • 字符流:以字符为单元,只能操作纯字符数据,(由 Reader 和 Writer 作为基类)
  • 字节流
  1. java.io.InputStream?字节输入流
  2. java.io.OutputStream?字节输出流
  • 字符流
  1. java.io.Reader?字符输入流
  2. java.io.Writer?字符输出流

以上 4 个类都是抽象类。

所有的流都实现了:
java.io.Closeable 接口,所有流都实现 close () 方法。流是一个管道,是内存和硬盘之间的通道,用完之后一定要 close (),不然会耗费 (占用) 很多资源。用完流一定要关闭。
所有的输出流都实现了:
java.io.Flushable 接口,所有流都实现 flush () 方法。刷新 flush () 表示将通道 / 管道当中剩余未输出的数据强行输出完(清空管道!)刷新的作用就是清空管道。输出流在最终输出之后,一定要 flush () 刷新一下。

三、Java 要掌握的流(16 个)

文件专属:
java.io.FileInputStream
java.io.FileOutputStream
java.io.FileReader
java.io.FileWriter


转换流:(将字节流转换成字符流)
java.io.InputStreamReader
java.io.OutputStreamWriter


缓冲流专属:
java.io.BufferedReader
java.io.BufferedWriter
java.io.BufferedInputStream
java.io.BufferedOutputStream


数据流专属:
java.io.DataInputStream
java.io.DataOutputStream


标准输出流:
java.io.PrintWriter
java.io.PrintStream


对象专属流:
java.io.ObjectInputStream
java.io.ObjectOutputStream


File 文件类
java.io.File
?

后续章节会对以上流进行逐个介绍。

文章来源:https://blog.csdn.net/weiweiqiao/article/details/134831970
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。