分类
从数据来源或者说是操作对象角度看,IO 类可以分为:
1、文件(file):FileInputStream、FileOutputStream、FileReader、FileWriter
2、数组([]):
2.1、字节数组(byte[]):ByteArrayInputStream、ByteArrayOutputStream
2.2、字符数组(char[]):CharArrayReader、CharArrayWriter
3、管道操作:PipedInputStream、PipedOutputStream、PipedReader、PipedWriter
4、基本数据类型:DataInputStream、DataOutputStream
5、缓冲操作:BufferedInputStream、BufferedOutputStream、BufferedReader、BufferedWriter
6、打印:PrintStream、PrintWriter
7、对象序列化反序列化:ObjectInputStream、ObjectOutputStream
8、转换:InputStreamReader、OutputStreWriter
9、字符串(String)Java8中已废弃:StringBufferInputStream、StringBufferOutputStream、StringReader、StringWriter
数据源节点也可以再进行二次处理,使数据更加容易使用,所以还可以划分成节点流和处理流,这里涉及到设计模式,后面会有专门的文章说。
close和flush
void flush() :刷新输出流,强制缓冲区中的输出字节被写出。
void close() :关闭输出流,释放和这个流相关的系统资源。
节流没有缓冲区,是直接输出的,而字符流是输出到缓冲区的。因此在输出时,字节流不调用colse()方法时,信息已经输出了,而字符流只有在调用close()方法关闭缓冲区时,信息才输出。要想字符流在未关闭时输出信息,则需要手动调用flush()方法。
参考
https://www.jianshu.com/p/715659e4775f