В Android что происходит с файлом, когда приложение падает в другом месте во время записи? - PullRequest
0 голосов
/ 02 октября 2018

Допустим, у меня есть фоновая задача, которая записывает случайное письмо в файл через FileOutputStream каждые 5 секунд.Через 1 минуту поток закроется и задача остановится.Допустим, приложение падает на 30 секунд в потоке пользовательского интерфейса, может быть, из NPE, и мы никогда не закрываем поток.

Сохраняет ли файл то, что мы уже записали в него?Или мы все потеряем?

Ответы [ 2 ]

0 голосов
/ 02 октября 2018

Я думаю, что это будет зависеть от того, находятся ли символы, которые вы отправляете в поток, все еще в буфере памяти потока.Большинство потоков будет использовать какой-то буфер памяти по соображениям производительности.Обычный шаблон в обработке исключений для кода ввода-вывода - это вызов close () для потока в блоке finally {}, чтобы убедиться, что поток закрыт (и очищен) независимо от того, происходит ли исключение.

0 голосов
/ 02 октября 2018

Это действительно зависит от того, какую реализацию OutputStream вы используете, так как это абстрактный класс.Метод, который фактически взаимодействует с файловой системой и записывает что-либо в файл, называется flush ().

Например, PrintStream может автоматически очищаться при каждой записи.

РЕДАКТИРОВАТЬ: FileOutputStream не заключен в какие-либо функции буферизации, поэтому он должен немедленно записать каждое письмо в ваш файл;файл сохранится с вашими письмами после сбоя.

...