Rozmiar pliku binarnego vs. ASCII

17

Muszę napisać dane z obliczeń, które zostaną później odczytane przez Paraview (plik .vtu lub vtk).

Jeśli chodzi o rozmiar pliku, czy powinienem wybrać format ASCII czy format binarny?

SAAD
źródło

Odpowiedzi:

20

Jeśli twoim jedynym zmartwieniem jest rozmiar pliku, to chcesz pliki binarne. W przykładowym przykładzie załóżmy, że piszesz 1 plik zmiennoprzecinkowy podwójnej precyzji do pliku. Załóżmy, że system plików doskonale sobie z tym poradzi, a plik, nagłówki i wypełnienie mają wartość 0.

W przypadku pliku binarnego liczba ta zajmowałaby dokładny rozmiar liczby w pamięci RAM lub 8 bajtów.

W formacie ASCII miałby:

  • 16 cyfr podstawy
  • 1 kropka dziesiętna
  • 1 znak, aby wyznaczyć wykładnik potęgi
  • 1 znak na znak wykładnika potęgi
  • 2-3 char dla wykładnika

Zakładając, że używa on tylko 1 bajtu na znak, czyli 22 bajty na tę samą liczbę. Nie uwzględnia to znaków wymaganych do rozróżnienia między liczbami (zwykle co najmniej 1). Dlatego rozmiar pliku w formacie ASCII będzie około 3 razy większy.

Możesz wymienić rozmiar pliku na dokładność w przechowywanych plikach (zachowaj tylko 5-6 cyfr w bazie), ale to zależy od tego, do czego ich używasz. Główną zaletą ASCII jest debugowanie lub tworzenie danych czytelnych dla ludzi.

Godric Seer
źródło
3
Na arenie naukowej ważne jest również długoterminowe archiwizowanie i niezawodne udostępnianie, dlatego pomimo swojej nieefektywności CSV ASCII jest tak rozpowszechniony i zalecany (PDF) .
horchler
2
Inną przydatną kwestią jest to, że chociaż kodowanie ASCII CSV nie jest bardzo wydajne, użycie narzędzia do kompresji plików (takiego jak zip, gzip itp.) W pliku ascii zwykle obniża rozmiar pliku do czegoś podobnego do rozmiaru pliku binarnego .
Brian Borchers,
3
Bądź ostrożny, ponieważ niektóre biblioteki wejściowe / wyjściowe nie są wystarczająco ostrożne, aby uzyskać bit dla powtarzalności bitów, gdy wyprowadzasz liczby podwójnej precyzji IEEE w ASCII, a następnie odczytujesz je ponownie. Z mojego doświadczenia wynika, że ​​użycie 17 lub 18 cyfr dziesiętnych jest czasami konieczne dla bezpieczeństwa .
Brian Borchers,
5
Odnośnie komentarza Horchlera: Jestem pewien, że dobrze używane, znormalizowane otwarte formaty binarne, takie jak HDF5, będą dostępne przez długi czas. To osobiście poleciłbym.
AlexE
1
+ Zawsze, gdy to możliwe, trzymam się kodu binarnego, aby uzyskać dokładność, zwartość, spokój i (szczególnie) szybkość. Jeśli potrzebuję dalszej zwartości, mogę ją skompresować. Jeśli muszę być w stanie wizualnie przeczytać zawartość, mogę napisać do tego mały program. Z drugiej strony, jeśli ważniejsze jest bycie wizualnym i łatwe przenoszenie do losowych programów, takich jak Excel, R itp., CSV jest właściwą drogą.
Mike Dunlavey,
15

W praktyce rzadko potrzebujesz danych w plikach wizualizacji, które są dokładniejsze niż, powiedzmy, 3 prawidłowe cyfry. W takim przypadku ASCII jest - może zaskakujące - często bardziej kompaktowy niż postać binarna. Jeśli zastanawiasz się nad archiwizacją, wówczas skompresowanie tych plików ASCII prawdopodobnie zapewni najmniejsze pliki, jakie możesz uzyskać.

To powiedziawszy, Paraview czyta format VTU, który ma skompresowaną formę binarną (oparty na XML, ale dane są najpierw kompresowane w libz, a następnie ponownie kodowane w celu uzyskania tekstu ASCII). W przypadku typowych plików pozwala to zaoszczędzić współczynnik 4-10. W przypadku dużych plików jest to zdecydowanie najlepsza droga.

Wolfgang Bangerth
źródło
2
Głosowałem za tym w przeciwieństwie do drugiej odpowiedzi. Tak czy inaczej, nie mam silnej opinii, ale tutaj warto się zgodzić.
Bill Barth
Alternatywnie, jawnie wyzeruj niskie bity i skompresuj plik binarny.
Jed Brown,
Wow, to wymagałoby trochę zabawy. Czy są funkcje, które to robią? (Inne niż rzucanie na pływaka i powrót do podwójnego.)
Wolfgang Bangerth