сброс в java.io. FileWriter

Textpad также работает хорошо во вводных файлах тот размер. Я много раз делал его, имея необходимость иметь дело с чрезвычайно большими файлами журнала в 3-5gb диапазоне. Кроме того, использование grep, чтобы вытащить стоящие строки и затем посмотреть на тех работает отлично.

29
задан i2ijeya 16 November 2009 в 14:04
поделиться

8 ответов

Писатели и потоки обычно буферизуют некоторые из ваших выходных данных в памяти и пытаются записывать его большими блоками за раз. очистка вызовет немедленную запись на диск из буфера, поэтому в случае сбоя программы эти данные не будут потеряны. Конечно, нет никакой гарантии, так как диск может физически не сразу записать данные, поэтому они все равно могут быть потеряны. Но тогда это будет не ошибка программы Java :)

PrintWriters автоматически сбрасывается (по умолчанию), когда вы пишете конец строки, и, конечно, потоки и буферы сбрасываются, когда вы их закрываете. Кроме этого, очистка происходит только при заполнении буфера.

22
ответ дан 28 November 2019 в 01:11
поделиться

Я настоятельно рекомендую уравнять флеш перед закрытием. В основном он записывает оставшиеся буферизованные данные в файл.

Если вы вызываете flush явно, вы можете быть уверены, что любое IOException , выходящее из close , действительно катастрофично и связанных с освобождением системных ресурсов.

Когда вы очищаете самостоятельно, вы можете обрабатывать его IOException так же, как вы обрабатываете свои исключения записи данных.

21
ответ дан 28 November 2019 в 01:11
поделиться

FileWriter является злым классом, поскольку он выбирает любой набор символов, который случайно присутствует, вместо того, чтобы брать явный набор символов. Даже если вам все-таки нужно значение по умолчанию, укажите это явно.

Обычное решение - OutputStreamWriter и FileOutputStream . Декоратор может вызвать исключение. Следовательно, вам нужно иметь возможность закрыть поток, даже если писатель никогда не создавался. Если вы собираетесь это сделать, вам нужно только очистить писатель (в счастливом случае) и всегда закрывать поток. (Чтобы сбить с толку, некоторые декораторы, например, для обработки zip-архивов, имеют ресурсы, требующие закрытия.)

1
ответ дан 28 November 2019 в 01:11
поделиться

Чтобы ответить на ваш вопрос о том, что на самом деле делает флеш, он гарантирует, что все, что вы записали в поток - файл в вашем случае - действительно записывается в файл тут же.

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

Close вызывает flush сначала, чтобы гарантировать, что после закрытия файл имеет то, что вы ожидаете увидеть в нем, следовательно, как указывали другие, нет необходимости промыть перед закрытием.

4
ответ дан 28 November 2019 в 01:11
поделиться

Нет смысла вызывать flush () непосредственно перед close (), как говорили другие. Время использовать flush () - это если вы оставляете файл открытым, но хотите убедиться, что предыдущая запись была полностью завершена.

1
ответ дан 28 November 2019 в 01:11
поделиться

Закрытие автоматически промывается. Вам не нужно называть это.

3
ответ дан 28 November 2019 в 01:11
поделиться

Как уже говорилось, обычно сбрасывать не нужно.

Это имеет смысл только в том случае, если по какой-то причине вы хотите, чтобы другой процесс увидел полное содержимое файла, который вы работая, не закрывая его. Например, его можно использовать для файла, который одновременно изменяется несколькими процессами, хотя и с БОЛЬШОЙ осторожностью: -)

1
ответ дан 28 November 2019 в 01:11
поделиться

Вам не нужно выполнять сброс, потому что close () сделает это за вас.

Из документации javadoc:

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

13
ответ дан 28 November 2019 в 01:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: