2010-05-27 20 views
2

J'ai besoin de sérialiser certaines données dans un format binaire pour l'efficacité (datalog où les fichiers 10-100MB sont typiques), et je travaille sur les détails de mise en forme. Je me demande si, de façon réaliste, je dois me soucier de la corruption de fichiers/correction d'erreurs/etcformats de fichiers binaires: besoin de correction d'erreur?

Dans quelles circonstances la corruption de fichiers peut-elle se produire? Dois-je renforcer la robustesse à la corruption dans mon format binaire? Ou devrais-je envelopper mon flux d'octets non -obuste-à-corruption avec une sorte de code de correction d'erreur? (des suggestions? J'utilise Java) Ou devrais-je ne pas m'inquiéter à ce sujet?

edit: Le format binaire préliminaire, comme je l'ai maintenant, contient un tas de segments de longueur variable, donc je suis un peu inquiet que si jamais je corrige des données, je peux le récupérer désynchronisé, et ne peut pas récupérer + je perds le reste du fichier.

+0

Quelle est l'importance des données? si une erreur se produit sur l'octet 1, le fichier entier est-il perdu? pouvez-vous récupérer la plupart des autres données de toute façon? – Randy

+1

Je pense que les codes HAMMING sont une bonne option si vous avez besoin de robustesse. fwiw – Randy

+0

Les codes HAMMING traitent des bits, et cela peut exiger beaucoup de calculs. La redondance XOR (comme dans RAID) peut être préférée. –

Répondre

2

Vous devez au moins ajouter une somme de contrôle. BER est bon sur les disques durs modernes, mais ce n'est pas le cas pour d'autres médias. La perte de puissance pendant l'écriture corrompt généralement les extrémités des fichiers. Si les données sont importantes, vous aurez besoin de codes de correction d'erreurs, d'écritures tripple et unbuffered, etc. pour valider les transactions. EXE ne possède pas de correction d'erreur, tandis que le changement d'un seul bit peut avoir des conséquences drastiques.

Si un fichier doit être transféré via TCP, vous pouvez supposer zéro erreur.

+0

checksum où? –

+0

somme de contrôle pour chaque bloc significatif. Plus le bloc est petit, moins les données seront déclarées perdues lors d'un dysfonctionnement. –

1

J'ai vu qu'il arrivait une ou deux fois qu'un fichier transféré sur Internet soit corrompu. Vous pouvez effectuer une détection d'erreur à l'aide d'une somme de contrôle, telle que SHA256.

+0

somme de contrôle où? –

1

Vous pourriez être intéressé par le notes on error detecting codes in HDF5. Où et quel type de checksum dépend de la façon dont vous accédez et mettez à jour les données ainsi que ce qui est un morceau utile pour détecter une erreur.