Я не могу сказать, как Java будет читать в поврежденном сериализованном массиве, но для безопасности предположим, что нет обнаружения ошибок.
В этом случае у вас есть два простых варианта:
- Сохраните контрольную сумму ваших данных внутри структуры данных, прежде чем сериализовать ее.
- Вычислить контрольную сумму окончательного сериализованного файла.
В любом случае будет работать одинаковоКстати, хотя первый вариант может быть немного быстрее, поскольку вы вычисляете контрольную сумму перед тем, как что-либо записать на диск (и, следовательно, избегаете дополнительного раунда файлового ввода-вывода).
Как вы упомянули, MD5 было бы хорошо для этого.(Даже простой CRC , вероятно, подойдет - вам не нужен криптографический хеш для этого.)
Если вы хотите разрешить откат к предыдущей версии - я 'd просто сохранить каждую версию в отдельном файле, а затем указатель на самую последнюю версию.(Если вы обновите указатель как последний шаг вашей операции записи, это также обеспечит дополнительный уровень защиты от ввода поврежденных данных в ваше приложение - хотя вам придется подготовиться и к тому, что этот указатель также будет поврежден.Поскольку это, по сути, шаг фиксации, вы можете интерпретировать поврежденный указатель как «используйте последнюю версию».)
И да, на этом этапе вы можете просто использовать функциональность SQLite, встроенную в Android.:)