Tamaño de archivo binario vs. ASCII

17

Necesito escribir algunos datos de un cálculo, que serán leídos más tarde por Paraview (archivo .vtu o vtk).

Cuando se trata del tamaño del archivo, ¿debo elegir el formato ASCII o el formato binario?

SAAD
fuente

Respuestas:

20

Si su única preocupación es el tamaño del archivo, entonces quiere archivos binarios. Para un ejemplo ilustrativo, supongamos que está escribiendo 1 número de coma flotante de doble precisión en un archivo. Supongamos que el sistema de archivos puede manejar esto perfectamente y mantener el archivo, los encabezados y el relleno son todos 0.

Para un archivo binario, ese número tomaría el tamaño exacto del número en RAM, u 8 bytes.

En formato ASCII, contendría:

  • 16 dígitos de la base
  • 1 periodo para el decimal
  • 1 carácter para delimitar el exponente
  • 1 carácter para el signo del exponente
  • 2-3 caracteres para el exponente

Suponiendo que usa solo 1 byte para un carácter, eso es 22 bytes para contener el mismo número. Esto no cuenta los caracteres necesarios para diluir entre números (generalmente al menos 1). Por lo tanto, el tamaño del archivo para el formato ASCII será aproximadamente 3 veces mayor.

Puede cambiar el tamaño del archivo por la precisión en los archivos almacenados (solo mantenga 5-6 dígitos en la base), pero eso depende de para qué los esté usando. La principal ventaja de ASCII es para depurar o producir datos legibles por humanos.

Vidente de Godric
fuente
3
También es importante en el ámbito científico el archivado a largo plazo y el intercambio confiable, por lo que, a pesar de sus ineficiencias, ASCII CSV es tan frecuente y recomendado (PDF) .
horchler
2
Otro punto útil es que, aunque la codificación ASCII CSV no es muy eficiente, el uso de una utilidad de compresión de archivos (como zip, gzip, etc.) en su archivo ascii generalmente reducirá el tamaño del archivo a algo similar al tamaño de un archivo binario .
Brian Borchers
3
Tenga cuidado porque algunas bibliotecas de entrada / salida no son lo suficientemente cuidadosas para obtener reproducibilidad bit por bit a medida que genera números IEEE de doble precisión en ASCII y luego los vuelve a leer. En mi experiencia, a veces es necesario usar 17 o 18 dígitos decimales para la seguridad .
Brian Borchers
55
Con respecto al comentario de horchler: estoy seguro de que los formatos binarios abiertos estandarizados y bien utilizados, como HDF5, existirán durante mucho tiempo. Eso es lo que personalmente recomendaría.
AlexE
1
+ Me adhiero al binario siempre que sea posible, por precisión, compacidad, tranquilidad y (especialmente) velocidad. Entonces, si necesito más compacidad, puedo comprimirlo. Si necesito poder leer visualmente el contenido, puedo escribir un pequeño programa para eso. Por otro lado, si es más importante ser visual y pasar fácilmente a programas aleatorios como Excel, R, etc., entonces CSV es el camino a seguir.
Mike Dunlavey
15

En la práctica, rara vez necesita datos en los archivos de visualización que sean más precisos que, digamos, 3 dígitos válidos. En ese caso, ASCII es, quizás sorprendentemente, a menudo más compacto que la forma binaria. Si está pensando en archivar, entonces al comprimir estos archivos ASCII probablemente obtendrá los archivos más pequeños que pueda obtener.

Dicho esto, Paraview lee el formato VTU que tiene una forma binaria comprimida (basada en XML, pero los datos se comprimen primero libz y luego se vuelven a codificar para generar texto ASCII). En archivos típicos, esto ahorra un factor de 4-10. Para archivos grandes, este es definitivamente el camino a seguir.

Wolfgang Bangerth
fuente
2
He votado por el contraste con la otra respuesta. No tengo una opinión fuerte de ninguna manera, pero hay un buen punto aquí.
Bill Barth
Alternativamente, ponga a cero explícitamente los bits bajos y comprima el binario.
Jed Brown el
Wow, eso requeriría un poco de violín. ¿O hay funciones que hacen eso? (Aparte de lanzar para flotar y volver al doble.)
Wolfgang Bangerth