I/O流及nio
IO流可以按多种情况分类,比如按流的单位分为字节流与字符流;按流向的不同分为输入流与输出流;按功能不同可分为节点流与处理流等等,不同的分类方式记忆的努力程度与效果是不同的。我认为最便于记忆的还是按功能的不同分为的节点流与处理流。(简单地说,节点流是直接连接程序与数据源/汇的,处理流是套在节点流上的流,它们的构造函数的参数是putStream/OutputStream)
先看下面两个图:
图一
图二
PS:这两个图的外围都是节点流(除了ObjectIO),并且图一中的处理流是可以互换位置的,即可以相互套接,因为它们的构造函数的参数一般为InputStream/Out.
一、节点流与处理流各包括哪些流:
1、节点流包括:
FileInputStream/Out、ByteArrayInputStream/Out、StringBufferInputStream/Out、PipedInputStream/Out、SequenceInputStream/Out、System.in/out
1、 处理流包括:
BufferedInputStream/Out、DataInputStream/Out、LineNumberInputStream、PushbackInputStream、ObjectInputStream/Out、
所有流:InputStream/Out、ByteArrayInputStream/Out、FileInputStream/Out、StringBufferInputStream/Out、PipedInputStream/Out、SequenceInputStream/Out、ObjectInputStream/Out、FilterInputStream/Out、BufferedInputStream/Out、DataInputStream/Out、LineNumberInputStream(无Out)、LineNumberReader(无writer)、PushbackInputStream(无Out)、PushbackReader(无writer)、PrintStream(只有输出)、PrintWriter、
Reader/Writer、CharArrayReader/Writer、BufferedReader/Writer、StringReader/Writer、PipedReader/Writer、FilterReader/Writer、InputStreamWriter/Out、FileReader/FileWriter、
RandomAccessFile、File等等