IO流的划分
按照流的流向分,可以分为输入流和输出流。
按照操作单元划分,可以划分为字节流和字符流。
按照流的角色划分为节点流和处理流。
节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader、FileWriter.
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。
节点流是底层流/低级流,直接跟数据源连接。处理流(包装流)包装节点流,既可以消除不同节点流的实现差异,也可以提供更方便的方法来完成输入和输出。处理流对节点流进行包装,主要以增加缓冲的方式来提高输入输出的效率,使用了修饰器设计模式,不会直接与数据源相连接。
主要抽象类
InputStream/Reader: 所有的输入流的基类,InputStream是字节输入流,InputReader是字符输入流。
OutputStream/Writer: 所有输出流的基类,OutputStream是字节输出流,OutputWriter是字符输出流。
字符IO流
字节IO流
对于低负载、低并发的应用程序,可以使用同步阻塞IO即BIO来提升开发速率和更好的维护性;对于高负载、高并发的(网络)应用,应使用同步非阻塞的 I/O 模型 NIO 来开发。AIO (Asynchronous I/O)是异步非阻塞的 IO 模型,基于事件和回调机制实现,应用操作之后会直接返回,不会堵塞,当后台处理完成,操作系统会通知相应的线程进行后续的操作