Tamanho do arquivo binário vs. ASCII

17

Eu preciso escrever alguns dados de uma computação, que serão lidos posteriormente pelo Paraview (arquivo .vtu ou vtk).

No que diz respeito ao tamanho do arquivo, devo escolher o formato ASCII ou o formato binário?

SAAD
fonte

Respostas:

20

Se sua única preocupação é o tamanho do arquivo, você deseja arquivos binários. Para um exemplo ilustrativo, suponha que você esteja gravando um número de ponto flutuante de precisão dupla em um arquivo. Vamos supor que o sistema de arquivos possa lidar com isso perfeitamente e manter o arquivo, cabeçalhos e preenchimento são 0.

Para um arquivo binário, esse número levaria o tamanho exato do número na RAM ou 8 bytes.

No formato ASCII, ele conteria:

  • 16 dígitos da base
  • 1 ponto decimal
  • 1 caractere para delimitar o expoente
  • 1 caractere para o sinal do expoente
  • 2 a 3 caracteres para o expoente

Supondo que ele use apenas 1 byte para um caractere, ou seja, 22 bytes para armazenar o mesmo número. Isso não conta os caracteres necessários para dilimitar entre números (geralmente pelo menos 1). Portanto, o tamanho do arquivo para o formato ASCII será cerca de 3 vezes maior.

Você pode trocar o tamanho do arquivo pela precisão dos arquivos armazenados (mantenha apenas de 5 a 6 dígitos na base), mas isso depende do motivo pelo qual você os está usando. A principal vantagem do ASCII é a depuração ou produção de dados legíveis por humanos.

Godric Seer
fonte
3
Também importante na arena científica é o arquivamento a longo prazo e o compartilhamento confiável, e é por isso que, apesar das ineficiências, o ASCII CSV é tão prevalente e recomendado (PDF) .
horchler
2
Outro ponto útil é que, embora a codificação ASCII CSV não seja muito eficiente, o uso de um utilitário de compactação de arquivos (como zip, gzip etc.) em seu arquivo ascii normalmente reduzirá o tamanho do arquivo para algo semelhante ao tamanho de um arquivo binário .
Brian Borchers
3
Tenha cuidado porque algumas bibliotecas de entrada / saída não são cuidadosas o suficiente para obter bits para a reprodutibilidade de bits, pois você gera números IEEE Double Precision em ASCII e os lê novamente. Na minha experiência, usar 17 ou 18 dígitos decimais às vezes é necessário para segurança .
Brian Borchers
5
Sobre o comentário de horchler: Tenho certeza de que formatos binários abertos padronizados e bem utilizados, como o HDF5, permanecerão por muito tempo. É o que eu recomendaria pessoalmente.
AlexEtiqueta #
11
+ Fico no binário sempre que possível, para precisão, compacidade, tranqüilidade e (principalmente) velocidade. Então, se eu precisar de mais compacidade, posso compactá-la. Se eu precisar ler visualmente o conteúdo, posso escrever um pequeno programa para isso. Por outro lado, se é mais importante ser visual e facilmente transmitido para programas aleatórios como Excel, R, etc., então o CSV é o caminho a percorrer.
Mike Dunlavey
15

Na prática, você raramente precisa de dados nos arquivos de visualização mais precisos do que, digamos, três dígitos válidos. Nesse caso, o ASCII é - talvez surpreendentemente - geralmente mais compacto que o formato binário. Se você está pensando em arquivar, é provável que compactar esses arquivos ASCII com o menor tamanho possível de arquivos.

Dito isto, o Paraview lê o formato VTU que possui um formato binário compactado (baseado em XML, mas os dados são compactados primeiro em libz e depois codificados novamente em uu para produzir texto ASCII). Em arquivos típicos, isso economiza um fator de 4-10. Para arquivos grandes, esse é definitivamente o caminho a percorrer.

Wolfgang Bangerth
fonte
2
Votei a favor do contraste com a outra resposta. Eu não tenho uma opinião forte de qualquer maneira, mas há um bom ponto a ser tido aqui.
Bill Barth
Como alternativa, zere explicitamente os bits mais baixos e comprima o binário.
precisa
Uau, isso exigiria algumas brincadeiras. Ou existem funções que fazem isso? (Além de lançar a flutuar e volta para o dobro.)
Wolfgang Bangerth