2014-12-10 3 views
1

Я знаю, что для закрытия всех внутренних и закрывающих потоков вы можете закрыть внешний поток, и он позаботится об окружающих потоках, но он будет полностью читать и записывать данные, прежде чем закрывать внутренние потоки или просто выполнять необходимые операции.Что происходит внутри, когда внешний поток закрыт?

Я просто хочу выяснить, что происходит и как внутренние функции вызываются во внутренних потоках, когда мы закрываем замкнутый поток? Как и в приведенном ниже кодексе

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(); 
} 

Когда я закрываю поток объектов, он будет ждать, пока File Stream выполнит свою функцию?

ответ

1

Да, если вы закроете ObjectOutputStream, все незавершенные операции записи будут выполнены.
Это потому, что ObjectOutputStream вызывает innerStream.flush() wenn вы звоните close() на нем.
И BufferedOutputStream также вызывает innerStream.flush() в своем собственном методе flush.

Все классы буферизации, которые я знаю, знают.

Смежные вопросы