Java IO流:基本概念

原创
04/27 21:20
阅读数 30

一、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
 

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

展开阅读全文
加载中
点击引领话题📣 发布并加入讨论🔥
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部