所有流的父类不外乎就是这4个类:
- Inputstreaam
- OutputStream
- Reader
- Writer
它们分别代表着字节输入流、字节输出流、字符输入流、字符输出流。
缓冲流
缓冲流属于高级流,它是在一种更高的层次对低级流进行的封装,FileInputStream 、FileOutputStream、FileReader 、FileWriter都属于低级流。
缓冲流的关键字眼是:Buffered,单词意思是“缓冲的”。缓冲流可以在流管道内增加缓存数据,让我们使用流读取字节或字符更加流畅和快捷。
它的作用相当于是加粗流管道,比如我们一边读取一边写入的时候,读取的字节如果供不应求,不仅会影响读取速度,可能还会出现其他的问题,尤其在读写网络数据时,网络可能随时发生拥塞,读取的字节很慢或不完整,这都不是我们想要的。
使用缓冲流理论上可以大大提高数据读写的性能。
缓冲流的构建:构造方法里的参数是一个低级流:
- new BufferedInputStream(FileInputStream fis)
- new BufferedOutputStream(FileOutputStream fos)
- new BufferedReader(FileReader fr)
- new BufferedWriter(FileWriter fw)
缓冲流的使用方式与低级流基本一致。
文件复制和加密使用BufferedInputStream和BufferedOutputStream性能会更高,尤其是大型的文件的读写。
读写文本文件通常使用BufferedReader和BufferedWriter会更好,不仅性能高,还具有读写一行的方法,非常方便。
- BufferedReader
String value = readLine(); - BufferedWriter
write(String)
newLine()
对象流
我们可以使用对象流把对象写入到一个文件里,然后在需要的时候通过读取文件获取该对象,达到对象的持久化保存的目的。
使用对象流涉及到对象的序列化和反序列化的知识。
对象的序列化指的是:将一个完整的对象拆分成字节碎片 记录在文件中
对象的反序列化指的是:将文件中记录的对象, 反序列化组合成一个完整的对象
一个对象想要序列化到文件中,需要具备的条件:
- 实现Serializable接口,它是一个示意性接口,没有定义方法
- 为了让对象可以反序列化,需要在对象中添加一个属性:private long serialVersionUID = 任意值L;
总结
除了文件流、缓冲流、对象流、其他的流还包括:数组流、数据流、字符串流。
不过那些流都不太常用,了解一下即可。