JAVA中IO流有两种分类方式:
1.按流向分为输入流和输出流。
2.按操作单元划分分为字符流和字节流。
3.按照流的角色划分为节点流和处理流。
Java Io流共涉及40多个类,这些类看上去很杂乱,但实际上很有规则,而且彼此之间存在非常紧密的联系, Java IO流的40多个类都是从如下4个抽象类基类中派生出来的。
- InputStream/Reader: 所有的输入流的基类,前者是字节输入流,后者是字符输入流。
- OutputStream/Writer: 所有输出流的基类,前者是字节输出流,后者是字符输出流。
网上的图非常好,就找了两张。
当然这么多类我并没有对应的去一个一个写代码并实践,因为io中的类都是非常对称的,比如 如果有一个xxxxxinputstream 那么一定有一个对应的xxxxxoutputstream,还有read和writer,但是他们都是单向的,要么读操作要么写操作。所以我们如果要完成一次io操作至少都要有两个一个输入一个输出。如果是在网络中,read和writer是阻塞的,除非等到有字符过来并且读完或写完才会向下执行。所以又催生除了JAVA NIO,下一张专门介绍NIO,NIO才是重点。