Статья Тима Брея «Безопасное сохранение данных» оставила у меня открытые вопросы. Сегодня ему больше месяца, и я не видел никаких дальнейших действий по этому поводу, поэтому я решил обратиться к этой теме здесь.
Один из пунктов статьи заключается в том, что FileDescriptor.sync () должен быть вызван для включения безопасная сторона при использовании FileOutputStream. Сначала я был очень раздражен, потому что за те 12 лет, что я занимаюсь Java, я ни разу не видел, чтобы код Java выполнял синхронизацию. Тем более, что работа с файлами - довольно простая вещь. Также, стандартный JavaDoc FileOutputStream никогда не намекал на синхронизацию (Java 1.0–6). После некоторых исследований я решил, что ext4 может быть первой файловой системой, требующей синхронизации. (Существуют ли другие файловые системы, в которых рекомендуется явная синхронизация?)
Я ценю некоторые общие мысли по этому поводу, но у меня также есть некоторые конкретные вопросы:
- Когда Android выполнит синхронизацию с файловой системой? Это может быть периодическим и дополнительно основываться на событиях жизненного цикла (например, процесс приложения переходит в фоновый режим).
- Обеспечивает ли FileDescriptor.sync () синхронизацию метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?): Я подумал, что ext4 на самом деле может быть первой основной файловой системой, требующей синхронизации. (Существуют ли другие файловые системы, в которых рекомендуется явная синхронизация?)
Я ценю некоторые общие мысли по этому поводу, но у меня также есть некоторые конкретные вопросы:
- Когда Android выполнит синхронизацию с файловой системой? Это может быть периодическим и дополнительно основываться на событиях жизненного цикла (например, процесс приложения переходит в фоновый режим).
- Обеспечивает ли FileDescriptor.sync () синхронизацию метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?): Я подумал, что ext4 может быть первой файловой системой, требующей синхронизации. (Существуют ли другие файловые системы, в которых рекомендуется явная синхронизация?)
Я ценю некоторые общие мысли по этому поводу, но у меня также есть некоторые конкретные вопросы:
- Когда Android выполнит синхронизацию с файловой системой? Это может быть периодическим и дополнительно основываться на событиях жизненного цикла (например, процесс приложения переходит в фоновый режим).
- Обеспечивает ли FileDescriptor.sync () синхронизацию метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?): (Существуют ли другие файловые системы, в которых рекомендуется явная синхронизация?)
Я ценю некоторые общие мысли по этому поводу, но у меня также есть некоторые конкретные вопросы:
- Когда Android выполнит синхронизацию с файловой системой? Это может быть периодическим и дополнительно основываться на событиях жизненного цикла (например, процесс приложения переходит в фоновый режим).
- Обеспечивает ли FileDescriptor.sync () синхронизацию метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?): (Существуют ли другие файловые системы, в которых рекомендуется явная синхронизация?)
Я ценю некоторые общие мысли по этому поводу, но у меня также есть некоторые конкретные вопросы:
- Когда Android выполнит синхронизацию с файловой системой? Это может быть периодическим и дополнительно основываться на событиях жизненного цикла (например, процесс приложения переходит в фоновый режим).
- Обеспечивает ли FileDescriptor.sync () синхронизацию метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?): sync () позаботиться о синхронизации метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?): sync () позаботиться о синхронизации метаданных? Это синхронизация каталога измененного файла. Сравните с FileChannel.force ().
- Обычно запись напрямую в FileOutputStream не выполняется. Вот мое решение (вы согласны?):
FileOutputStream fileOut = ctx.openFileOutput (файл, Context.MODE_PRIVATE);
BufferedOutputStream out = новый BufferedOutputStream (fileOut);
пытаться {
out.write (что-то);
out.flush ();
fileOut.getFD (). sync ();
} Ну наконец то {
out.close ();
}
задан Markus Junginger 16 January 2011 в 20:18
поделиться