Dimensione del file binario vs. ASCII


17

Ho bisogno di scrivere alcuni dati da un calcolo, che verranno letti in seguito da Paraview (file .vtu o vtk).

Per quanto riguarda le dimensioni del file, devo scegliere il formato ASCII o Binary?

Risposte:


20

Se la tua unica preoccupazione è la dimensione del file, allora vuoi i file binari. Per un esempio illustrativo, supponiamo che tu stia scrivendo 1 numero in virgola mobile a precisione doppia su un file. Supponiamo che il file system sia in grado di gestirlo perfettamente e che il file, le intestazioni e il padding siano tutti 0.

Per un file binario, quel numero avrebbe la dimensione esatta del numero nella RAM, o 8 byte.

In formato ASCII, conterrebbe:

  • 16 cifre della base
  • 1 punto per il decimale
  • 1 carattere per delimitare l'esponente
  • 1 carattere per il segno dell'esponente
  • 2-3 caratteri per l'esponente

Supponendo che utilizzi solo 1 byte per un carattere, ovvero 22 byte per contenere lo stesso numero. Questo non conta i caratteri richiesti per diluire tra i numeri (di solito almeno 1). Pertanto la dimensione del file per il formato ASCII sarà circa 3 volte più grande.

Puoi scambiare le dimensioni del file per la precisione nei file memorizzati (mantieni solo 5-6 cifre nella base), ma questo dipende da cosa li stai usando. Il vantaggio principale di ASCII è per il debug o la produzione di dati leggibili dall'uomo.


3
Anche in ambito scientifico è importante l'archiviazione a lungo termine e la condivisione affidabile, motivo per cui, nonostante le inefficienze, ASCII CSV è così diffuso e raccomandato (PDF) .
Horchler,

2
Un altro punto utile è che sebbene la codifica ASCII CSV non sia molto efficiente, l'utilizzo di un'utilità di compressione dei file (come zip, gzip, ecc.) Sul file ASCII in genere riduce le dimensioni del file a qualcosa di simile alla dimensione di un file binario .
Brian Borchers,

3
Fai attenzione perché alcune librerie di input / output non sono abbastanza attente da ottenere bit per la riproducibilità dei bit mentre esegui l'output di numeri IEEE Double Precision in ASCII e poi li rileggi. Nella mia esperienza, l'uso di 17 o 18 cifre decimali è talvolta necessario per sicurezza .
Brian Borchers,

5
Per quanto riguarda il commento di Horchler: sono sicuro che i formati binari aperti standardizzati ben utilizzati come HDF5 rimarranno in circolazione per molto tempo. Questo è ciò che consiglierei personalmente.
AlexE

1
+ Rispetto al binario ogni volta che è possibile, per precisione, compattezza, tranquillità e (soprattutto) velocità. Quindi, se ho bisogno di ulteriore compattezza, posso comprimerlo. Se devo essere in grado di leggere visivamente il contenuto, posso scrivere un piccolo programma per quello. D'altra parte, se è più importante essere visivi e passare facilmente a programmi casuali come Excel, R, ecc., CSV è la strada da percorrere.
Mike Dunlavey,

15

In pratica, raramente sono necessari dati nei file di visualizzazione più precisi di, diciamo, 3 cifre valide. In tal caso, ASCII è - forse sorprendentemente - spesso più compatto della forma binaria. Se stai pensando di archiviare, la compressione di questi file ASCII produrrà probabilmente i file più piccoli che puoi ottenere.

Detto questo, Paraview legge il formato VTU che ha una forma binaria compressa (basata su XML, ma i dati vengono prima compressi in libz e poi nuovamente codificati per produrre testo ASCII). Sui file tipici, ciò consente di risparmiare un fattore 4-10. Per file di grandi dimensioni, questa è sicuramente la strada da percorrere.


2
Ho votato a favore per il contrasto con l'altra risposta. Non ho un'opinione forte in entrambi i casi, ma qui c'è un buon punto.
Bill Barth,

In alternativa, azzera esplicitamente i bit bassi e comprimi il binario.
Jed Brown,

Caspita, ciò richiederebbe un po 'di confusione. O ci sono funzioni che lo fanno? (Oltre al casting per galleggiare e tornare al doppio.)
Wolfgang Bangerth,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.