Двоичные форматы файлов: нужно исправлять ошибки?

Мне нужно сериализовать некоторые данные в двоичном формате для эффективности (журнал данных, где файлы размером 10-100 МБ являются типичными), и я прорабатываю детали форматирования. Мне интересно, если реально мне нужно беспокоиться о повреждении файла / исправление ошибок / и т.д.

В каких случаях может произойти повреждение файла? Должен ли я строить устойчивость к коррупции в моем двоичном формате? Или я должен обернуть свой поток байтов, не подверженный повреждению, каким-то кодом с исправлением ошибок? (есть предложения? Я использую Java) Или мне просто не стоит об этом беспокоиться?

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

4 ответа

Решение

Я пошел с системой кодирования Рида-Соломона. В библиотеке Google zxing есть довольно простая в использовании реализация Java на Java.

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

EXE не имеет исправления ошибок, в то время как изменение одного бита может иметь серьезные последствия.

Если файл должен быть передан по TCP, вы можете предположить, что ошибок нет.

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

Возможно, вас заинтересуют заметки о кодах обнаружения ошибок в HDF5. Где и какая контрольная сумма зависит от того, как вы осуществляете доступ к данным и обновляете их, а также от того, какой полезный блок выявляет ошибка.

Другие вопросы по тегам