2010-05-27 3 views
2

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

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

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

+0

Насколько важны данные? если в байте 1 возникает ошибка, весь файл пропадает? вы можете восстановить большинство других данных? – Randy

+1

Я думаю, что коды HAMMING - хороший вариант, если вам нужна определенная надежность. fwiw – Randy

+0

Коды HAMMING обрабатывают биты, и это может быть интенсивным вычислением. Предпочтительным может быть избыточность XOR (как в RAID). –

ответ

2

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

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

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

+0

контрольная сумма где? –

+0

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

1

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

+0

контрольная сумма где? –

1

Возможно, вас заинтересует notes on error detecting codes in HDF5. Где и какая контрольная сумма зависит от того, как вы получаете доступ и обновляете данные, а также то, что является полезным фрагментом для обнаружения ошибки.