Java IO流:基本概念
一、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 作为基类)
- 字节流
- java.io.InputStream?字节输入流
- java.io.OutputStream?字节输出流
- 字符流
- java.io.Reader?字符输入流
- 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
?
后续章节会对以上流进行逐个介绍。
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!