天天看点

java的节点流和处理流的关闭顺序

1、流关闭的顺序

(1)流之间没有依赖关系:先打开的后关闭,后打开的先关闭;

(2)流之间存在依赖关系:如果流a依赖流b,那么应该先关闭流a,再关闭流b。例如:处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b。

(3)可以只关闭处理流,不用关闭节点流,因为处理流关闭的时候,会调用节点流的关闭方法。

注意:

1、如果先关闭节点流,再关闭处理流,会抛出IO异常;

2、如果关闭了处理流,再关闭节点流,需要先做判断;

FileOutputStream fos = new FileOutputStream(zipFileName);
        ZipOutputStream zipOutput = new ZipOutputStream(fos);
           
//先关闭处理流
			zipOutput.close();
			//对节点流进行判断,不为空,再关闭
            if (fos != null) {
                try {
                    fos.close();
                } catch (Exception e) {
                    logger.error("error", e);
                }
            }
           

2、流的概念

(1)节点流:可以从或向一个指定的地方读写数据,如FileReader;

(2)处理流:是对一个节点流的封装,通过封装的方法调用节点流功能进行读取数据。如BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。

3、常用的节点流

(1)FileInputStream FileOutputStream FileReader FileWriter 文件处理的流;

(2)StringReader StringWriter 对字符串进行处理的流;

(3)ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组处理的流;

(4)PipedInputStream PipedOutputStream PipedReader PipedWriter 对管道进行处理的流

4、常用的处理流