Преимущества использования flush() close() в потоках Android?

Я знаю общую идею, но я просто не уверен, что это имеет эффект, так как в Android api говорится следующее: "Сбрасывает этот поток. Реализации этого метода должны гарантировать, что все буферизованные данные будут выписаны.."

Эта реализация ничего не делает < - означает ли это ее бесполезность или я что-то не хватает?

Ответ 1

Если вы читаете расширенные документы в oracle

http://download.oracle.com/javase/1.4.2/docs/api/java/io/OutputStream.html#flush()

Сбрасывает этот выходной поток и заставляет выписать любые буферные выходные байты. Общий контракт флеша состоит в том, что вызов - это указание на то, что если какие-либо ранее записанные байты были буферизованы реализацией выходного потока, такие байты должны быть немедленно записаны в предназначенный им пункт назначения.

Метод сброса OutputStream ничего не делает.

Значит, сам метод ничего не делает и является абстрактным, поэтому любой базовый класс может реализовать свою собственную версию потоков очистки и заставить их писать (не дожидаясь очереди на запись)

Но в любом случае, как отметил Guillaume, хорошей практикой назвать это в любом случае. Если позже вы замените свой поток другой реализацией, которая его использует, тогда вам будет жаль.

В зависимости от ОС, flush() делает не что иное, как принуждение записывать данные в ОС.

и

flush() ничего не делает в FileOutputStream. Это полезно только для буферизованных потоков.

и из javadoc close(), просто чтобы отметить, что вам не нужно очищать поток, если вы закрываете его сразу после.

Закройте поток, сначала промойте его. Как только поток будет закрыт, дополнительные вызовы write() или flush() вызовут исключение IOException. Однако закрытие ранее закрытого потока не влияет.

связаны:
FileOutputStream.close очень медленный при записи большого файла
flush в java.io.FileWriter