1.文件字符IO流:
文件字符流是底层流,包括FileReader和FileWriter类,是Reader/Writer类的子类,以字符为单位处理数据,用于向指定文件读写字符数据。它们内部会根据指定的字符集自动完成字节到字符的转换,方便进行文本文件的操作。
2.文件字节IO流:
文件字节流是底层流,包括FileInputStream和FileOutputStream类,是InputStream/OutputStream类的子类。以字节为单位处理数据,用于向指定文件读写字节数据。字节流适用于处理任何形式的二进制数据,包括文本文件(在这种情况下需自行处理字符编码)。
3.缓冲流:
缓冲流是上层流,包含BufferedReader和BufferedWriter类,需与字符流相连(即将字符流作为缓冲流的源和目的地)。对底层流进行包装,提供了额外的缓冲区,具有更多处理数据的方法,增强了数据的读写能力。
4.数据流:
数据流是上层流,包括DataInputStream和DataOutputStream类,连接的底层流只能是字节流。数据流允许程序按着机器无关的风格,读取Java原始数据。也就是说,当读取一个数值时,不必再关心这个数值应当是多少个字节。其主要用于处理具有特定格式的数据,如整数、浮点数等基本类型数据的高效读写。
5.对象流:
对象流是上层流,是InputStream/OutputStream类的子类。通过对象流可以读取和写出实现了Serializable接口的对象(保证对象是序列化的)。使用对象流很容易获取一个序列化对象的克隆,克隆对象与原对象引用值不同,任一对象的实体变化不会引起另一对象的实体变化。
6.随机流:
随机流不同于前面提到的顺序流,它可以随机访问文件的任意位置。随机流创建的流的指向既可以作为流的源,也可以作为流的目的地。支持读写模式,既可以从文件的任意位置读取数据,也可以修改文件的任意位置的数据。因为直接在原文件上读写,故不存在刷新问题。
7.数组流:
包括字节数组流和字符数组流。流和源的目的地除了可以是文件外,还可以是计算机内存。数组流将数据存入计算机内存中的数组缓冲区,而不是存入文件系统或者其他持久化存储介质。当用户向数组输出流
写入数据时,它会将这些数据暂时保存在一个内部的数组中,随着写入的数据量增大,如果内部数组容量不足,数组输出流
会自动扩容以容纳更多的数据,便于进一步处理或者传输。
例如,在网络编程中,有时会先将数据写入,然后再转换成数组发送出去;在处理文件时,也可以先读取文件内容,再进行其他内存操作,之后可以选择性地将整个或部分内容写入到新的文件或输出流中。
当程序想快速得到克隆对象,可以用对象流将对象的序列化信息写入内存,而不是写入到磁盘的文件中。故对象流将数组流作为底层流就可以将将对象的序列化信息写入内存。