Taille du fichier binaire vs ASCII

17

J'ai besoin d'écrire quelques données à partir d'un 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?

SAAD
la source

Réponses:

20

Si votre seul souci est la taille du fichier, alors 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 période pour la décimale
  • 1 caractère pour délimiter l'exposant
  • 1 caractère pour le signe de l'exposant
  • 2-3 caractères pour l'exposant

En supposant qu'il utilise seulement 1 octet pour un caractère, c'est-à-dire 22 octets pour contenir le même nombre. Cela ne prend pas en compte les caractères requis pour se délimiter 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 pour la précision des fichiers stockés (ne conserver que 5 à 6 chiffres dans la base), mais cela dépend de la raison pour laquelle vous les utilisez. Le principal avantage de l'ASCII est le débogage ou la production de données lisibles par l'homme.

Godric Seer
la source
3
L'archivage à long terme et le partage fiable sont également importants dans le domaine scientifique.C'est pourquoi, malgré ses inefficacités, ASCII CSV est si répandu et recommandé (PDF) .
horchler
2
Un autre point utile est que, bien que l'encodage ASCII CSV ne soit pas très efficace, l'utilisation d'un utilitaire de compression de fichiers (comme zip, gzip, etc.) sur votre fichier ascii réduira généralement la taille du fichier à quelque chose de similaire à la taille d'un fichier binaire .
Brian Borchers
3
Soyez prudent car certaines bibliothèques d'entrée / sortie ne sont pas assez prudentes pour obtenir une reproductibilité bit à bit lorsque vous sortez des nombres IEEE Double Precision en ASCII, puis les relisez. D'après mon expérience, l'utilisation de 17 ou 18 chiffres décimaux est parfois nécessaire pour la sécurité .
Brian Borchers
5
Concernant le commentaire de Horchler: Je suis sûr que les formats binaires ouverts standardisés et bien utilisés tels que HDF5 seront présents pendant longtemps. C'est ce que je recommanderais personnellement.
AlexE
1
+ Je m'en tiens au binaire autant que possible, pour la précision, la compacité, la tranquillité d'esprit et (surtout) la vitesse. Ensuite, si j'ai besoin de plus de compacité, je peux le compresser. Si j'ai besoin de pouvoir lire visuellement le contenu, je peux écrire un petit programme pour ça. D'un autre côté, s'il est plus important d'être visuel et facilement transmis à des programmes aléatoires comme Excel, R, etc., alors CSV est la voie à suivre.
Mike Dunlavey
15

En pratique, vous avez rarement besoin de données dans des fichiers de visualisation plus précises que, disons, 3 chiffres valides. Dans ce cas, ASCII est - peut-être surprenant - souvent plus compact que la forme binaire. Si vous songez à l'archivage, le fait de compresser ces fichiers ASCII va probablement produire les plus petits fichiers que vous puissiez obtenir.

Cela dit, Paraview lit le format VTU qui a une forme binaire compressée (basée sur XML, mais les données sont d'abord compressées libz puis codées de nouveau pour produire du texte ASCII). Sur les fichiers typiques, cela enregistre un facteur de 4 à 10. Pour les gros fichiers, c'est définitivement la voie à suivre.

Wolfgang Bangerth
la source
2
J'ai voté pour le contraste avec l'autre réponse. Je n'ai pas une opinion bien arrêtée de toute façon, mais il y a un bon point à avoir ici.
Bill Barth
Alternativement, mettez à zéro explicitement les bits bas et compressez le binaire.
Jed Brown
Wow, cela nécessiterait un peu de tripotage. Ou y a-t-il des fonctions qui font cela? (Autre que lancer pour flotter et revenir au double.)
Wolfgang Bangerth