JDK为每种类型的流提供了一些抽象类以供继承,分别是哪些类
字节输入流:InputStream,字节输出流:OutputStream
字符输入流:Reader,字符输出流:Writer
关闭流顺序原则:
一般情况下是:先打开的后关闭,后打开的先关闭
另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b
例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b
当然完全可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法
如果将节点流关闭以后再关闭处理流,会抛出IO异常
对于 IO 流涉及的装饰者设计模式例子如下:
//把InputStreamReader装饰成BufferedReader来成为具备缓冲能力的Reader。BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
对于 IO 流涉及的适配器设计模式例子如下:
//把FileInputStream文件字节流适配成InputStreamReader字符流来操作文件字符串。
FileInputStream fileInput = new FileInputStream(file);
InputStreamReader inputStreamReader = new InputStreamReader(fileInput);
而对于上面涉及的两种设计模式通俗总结如下。装饰者模式就是给一个对象增加一些新的功能,而且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例(各种字符流间装饰,各种字节流间装饰)。适配器模式就是将某个类的接口转换成我们期望的另一个接口表示,目的是消除由于接口不匹配所造成的类的兼容性问题(字符流与字节流间互相适配)。
1、面向流与面向缓冲
2、阻塞与非阻塞IO
3、选择器(Selectors)。NIO: 单线程管理多个连接,IO: 一个连接通过一个线程处理.