Taille du fichier binaire vs ASCII

Jai besoin décrire des données à partir dun calcul, qui seront lues plus tard par Paraview (fichier .vtu ou vtk).

En ce qui concerne la taille du fichier, dois-je opter pour le format ASCII ou le format binaire?

Réponse

Si votre seul souci est la taille du fichier, vous voulez des fichiers binaires. Pour un exemple illustratif, supposons que vous écrivez 1 nombre à virgule flottante double précision dans un fichier. Supposons que le système de fichiers puisse gérer cela parfaitement et que le fichier, les en-têtes et le remplissage soient tous à 0.

Pour un fichier binaire, ce nombre prendrait la taille exacte du nombre en RAM, ou 8 octets.

Au format ASCII, il contiendrait:

  • 16 chiffres de la base
  • 1 point pour la décimale
  • 1 caractère pour délimiter lexposant
  • 1 caractère pour le signe de lexposant
  • 2-3 caractères pour lexposant

En supposant il utilise seulement 1 octet pour un caractère, soit 22 octets pour contenir le même nombre. Cela ne compte pas les caractères nécessaires pour dilimiter entre les nombres (généralement au moins 1). Par conséquent, la taille du fichier au format ASCII sera environ 3 fois plus grande.

Vous pouvez échanger la taille du fichier contre la précision des fichiers stockés (ne conserver que 5-6 chiffres dans la base), mais cela dépend de ce vous les utilisez pour. Le principal avantage de lASCII est le débogage ou la production de données lisibles par lhomme.

Commentaires

  • Larchivage à long terme et la fiabilité sont également importants dans larène scientifique partage, cest pourquoi, malgré ses ‘ inefficacités, ASCII CSV est si répandu et recommandé (PDF) .
  • Un autre point utile est que, bien que lencodage ASCII CSV ne soit ‘ t très efficace, en utilisant un utilitaire de compression de fichiers (comme zip, gzip, etc.) sur votre ascii file réduira généralement la taille du fichier à quelque chose de similaire à la taille dun fichier binaire.
  • Soyez prudent car certaines bibliothèques dentrée / sortie ne sont ‘ pas assez prudentes pour obtenir une reproductibilité bit à bit lorsque vous produisez des nombres IEEE Double Precision en ASCII, puis les relisez. Daprès mon expérience, lutilisation de 17 ou 18 chiffres décimaux est parfois nécessaire pour la sécurité.
  • Concernant horchler ‘ s commentaire: Je ‘ je suis sûr que les formats binaires ouverts normalisés et bien utilisés tels que HDF5 seront là pendant longtemps. Cest ‘ que je ‘ recommander personnellement.
  • + Je men tiens au binaire chaque fois que possible, pour plus de précision, compacité, tranquillité desprit et (surtout) rapidité. Ensuite, si jai besoin de plus de compacité, je peux le compresser. Si jai besoin de pouvoir lire visuellement le contenu, je peux écrire un petit programme pour cela. Dun autre côté, sil est ‘ plus important dêtre visuel et facilement transmis à des programmes aléatoires comme Excel, R, etc., alors CSV est la solution.

Réponse

En pratique, vous avez rarement besoin de données dans des fichiers de visualisation qui sont plus précises que, disons, 3 valides Dans ce cas, ASCII est – peut-être étonnamment – souvent plus compact que la forme binaire. Si vous pensez à larchivage, alors bziping ces fichiers ASCII va probablement produire les plus petits fichiers que vous pouvez obtenir.

Cela dit, Paraview lit le format VTU qui a une forme binaire compressée (basé sur XML, mais les données sont dabord compressées par libz puis uuencodées à nouveau pour produire du texte ASCII). Sur les fichiers classiques, cela économise un facteur de 4 à 10. Pour les gros fichiers, cest certainement la voie à suivre.

Commentaires

  • Jai voté pour le contraste avec lautre réponse. Je nai ‘ pas une opinion forte de toute façon, mais il y a ‘ un bon point à avoir ici.
  • Sinon, mettez à zéro explicitement les bits faibles et compressez le binaire.
  • Wow, cela nécessiterait un peu de bidouillage. Ou y a-t-il des fonctions qui font cela? (Autre que la conversion en float et retour au double.)

Answer

tl; dr – stocker les fichiers dans utf8 . Si cest tabulaire, utilisez des valeurs séparées par des tabulations.

Il me semble que les options correctes sont:

  1. utf8 texte ( pas ASCII . Nous ne sommes pas tous anglophones américains)
  2. binaire

ASAICT le seul véritable avantage des fichiers binaires est la performance. Il est beaucoup plus rapide de charger un vidage mémoire en mémoire que de générer du texte en sortie ou de lanalyser en entrant.

par exemple https://www.cfd-online.com/Forums/openfoam/136983-binary-gives-significant-performance-advantage-mesh-solve.html

Ou ici: https://auth0.com/blog/beating-json-performance-with-protobuf/ (Ceci nest pas scientifique et traite des performances globales, les grandes différences étant la quantité de données transmises et le temps danalyse dans un cas biaisé vers des données textuelles. )

Les chances quun format de fichier binaire supporte correctement le texte Unicode sont faibles, donc si vous vous souciez de lintégrité des données, nutilisez pas le binaire . Avez-vous également entendu parler des problèmes endians? Différentes représentations binaires dentiers signés et de flottants?

Les représentations textuelles de -100000 et -1e + 6 ne changent pas de valeur en fonction sur votre CPU (en utf-8 et ASCII, en tout cas).

Les chances quun programme qui comprend un fichier binaire le comprenne encore ou sexécutent encore dans 50 ans sont inconnues, probablement pas bonnes . Si vous vous souciez de la longévité, nutilisez pas le binaire .

Il est souvent difficile de lire les données binaires dun autre programme, donc si vous vous souciez de linteropérabilité, nutilisez pas le binaire .

À part: CSV est un format de fichier terrible . Il est simple, mais mal défini et nécessite un analyseur avec état. Nutilisez pas CSV. Si vous le devez, utilisez TSV. Cest plus simple mais mieux défini et facile à analyser.

https://chriswarrick.com/blog/2017/04/07/csv-is-not-a-standard/

https://www.cloudbakers.com/blog/everything-you-didnt-want-to-have-to-know-about-csv

Si vous êtes préoccupé par la taille, compressez .

(Je suis venu ici à la recherche détudes sur lefficacité de la taille relative de la représentation binaire compressée par rapport à la compression texte. Je nai toujours pas trouvé de bonnes informations en dehors de cette étude sur VRML, mais je ne sais même pas sil sagit dune comparaison entre le binaire encodé en base64 et le binaire. https://www.cs.unc.edu/~isenburg/papers/is-bcraf-03.pdf .)

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *