前言
在曾今的面试中被问到了io流,nio,还有如今经常听到的netty,io流还能答上一点,其他的一概不知怎么回答;
最近在公司也没事干,正好学习到了io流,就来整理一下吧;
这是Java io流的类图,网上很多,我也是截图的网上的;
代码演练
为了直接练习,文中所有涉及到的文件都是先创建好的;
字符流
-
带有Reader,Writer的都属于字符流
- 一般是对纯文本进行操作,是以字符为单位读取文本文件,所以以下的实例都是定义的 ` char ` 数组
- 根据码表映射字符,一次可能读多个字节。
FileReader,FileWriter:
直接对文件操作
1 |
|
BufferedReader,BufferedWriter:
将文件操作的流放入缓冲区,在进行处理
BufferedReader
可以对文本一行一行的读取,但是输出的时候需要自己进行隔行,不然数据都会紧紧的挨在一起;
1 |
|
注意:这里调用了 ` flush ` 方法,因为改代码段使用了缓冲,缓冲区的数据只有存满了才会自动发送,这里尾存满需,要调用该方法将缓冲区的数据发送出去,不然文本中会没有数据;
InputStreamReader,OutputStreamWriter:
将字节流转换为字符流,在进行处理;
1 |
|
字节流
FileInputStream,FileOutputStream
直接读文件进行操作
1 |
|
BufferedInputStream,BufferedOutputStream
将文件操作流放入缓冲区再进行操作
因为是对文件直接操作,所以无法一行一行的读取;也没有那个方法;
1 |
|
注意:这里使用了缓冲,需要调用 ` flush ` 方法;
ObjectOutputStream,ObjectInputStream
将对象持久化到本地TXT文件,注意,在TXT文件中的是二进制代码,并不是乱码;所以不要认为是乱码;
1 |
|
其他还有很多类和方法没有写,这里只进行入门的操作;代码部分就到这里了;
总结
io流
io流分类
- 根据流向来分:输入流和输出流
- 根据处理类型来分:字节流和字符流
输入输出流
输入流只能进行读操作,输出流只能进行写操作
字节流和字符流
- 字节流可以对所有文件进行操作,例如:图片,音乐文件,电影等;字符流只处理文本文档,例如TXT文本,xml,yml等
- 字节流是以字节为单位,字符流是以字符为单位,可以看到上边的字符流的代码中全是用的 ` char ` 数组,而字节流中全是用的 ` byte ` 数组
这里面的内容非常详细;