2012-02-14 13 views

Odpowiedz

26

flush() zapisuje zawartość bufora do miejsca przeznaczenia i sprawia, że ​​bufor pusty dalszych danych do przechowywania, ale nie zamyka strumień stałe. Oznacza to, że możesz nadal dodawać więcej danych do strumienia.

Ale close() zamyka strumień na stałe. Jeśli chcesz napisać dalej dane, musisz ponownie otworzyć strumień i dołączyć dane do istniejących.

+0

Podczas korzystania z BufferedWriter (lub BufferedReader) nie musimy się martwić o flush() - BufferedWriter opróżnia się wewnętrznie podczas "write()", gdy bufor jest pełny. – enator

+1

Ale na końcu __if bufor nie jest pusty ani pełny__, a my chcemy zapisać ostatnią część na dysku (co jest prawie zawsze pożądane), __ musimy "opróżnić()' to jawnie/ręcznie__, co jest bardzo potrzebne . – FaithReaper

42

flush()tylko zapewnia, że ​​każdy buforowane dane są zapisywane na dysku (w tym przypadku - bardziej ogólnie, przepłukać cokolwiek kanału IO używasz). Nadal możesz pisać do strumienia (lub pisarza).

close() opróżnia dane i wskazuje, że nie ma już żadnych danych. Zamyka wszystkie uchwyty plików, gniazda lub cokolwiek innego. Wtedy nie możesz już pisać do strumienia (lub pisarza).

Należy pamiętać, że bez połączenia do flush() danych może nadal być napisane do kanału IO mowa - to tylko niektóre dane może być buforowane.

close() ogólnie nazywa flush() jak dobrze, ale to niedawno wskazał mi, że w niektórych implementacjach JDK, wszelkie wyjątki rzucane przez spłukiwania jako część zamknięcia są połykane :(

+0

Flush() jest wystarczający? lub powinniśmy zadzwonić blisko po kolorze? Jeśli chcę zadzwonić flush – VedX

+1

@TmP: Cóż, powinieneś nazwać 'close' at * some * point. –

+0

Dziękuję Sir @ Jon Skeet – VedX

3

flush() opróżnia zawartość bufora do miejsca przeznaczenia. a możesz napisać coś znowu do strumienia close() flushes treści do przeznaczenia i zamyka strumień Po close() nie można napisać nic więcej

+1

Jon Skeet napisał 15 sekund wcześniej)) – shift66

2

flush()... aby opróżnić strumienia wyjściowego, użyj void flush() meto d z klasy DataOutputStream. Ta metoda wewnętrznie wywołuje metodę flush() klasy podstawowej OutputStream, która wymusza zapisywanie wszystkich zbuforowanych bajtów wyjściowych w strumieniu.

close(): Zwykle zamyka strumień, połączenie, gniazdo.

Zobacz flush and close example

+0

Ale czy natychmiast wypłukuje dane lub zawartość pliku, gdy napotka jakieś dane do zapisania w pliku? – mum

+0

Nie, nie od razu wypłukuje dane. Zmusza bajty wyjściowe do zapisywania danych w strumieniu. Gdy wywołuje metodę close, wówczas pobiera dane i wskazuje, że nie ma więcej danych. – Suresh

Powiązane problemy