当最外面的Stream关闭时,内部会发生什么?

时间:2014-12-10 11:57:43

标签: java

我知道要关闭所有内部和封闭的流,您可以关闭最外面的Stream,它将处理封闭的Streams但是在关闭内部流之前等待完全读取和写入数据,或者只是执行所需的操作

我只想弄清楚当我们关闭封闭的流时会发生什么以及如何在内部流上调用内部函数?就像下面的代码一样

 public static void serialize(Object obj, String fileName)
        throws IOException {

    FileOutputStream fos = new FileOutputStream(fileName);
    BufferedOutputStream bos = new BufferedOutputStream(fos);
    ObjectOutputStream oos = new ObjectOutputStream(bos);
    bos.flush();
    oos.writeObject(obj);
    oos.close();
 }

当我关闭对象流时,它会等待文件流执行其功能吗?

1 个答案:

答案 0 :(得分:1)

是的,如果关闭ObjectOutputStream,将执行所有挂起的写操作 这是因为ObjectOutputStream会调用innerStream.flush(),而是在其上调用close() BufferedOutputStream也在自己的flush方法中调用innerStream.flush()

我知道的所有缓冲流类都是这样做的。