Ukuran file biner vs. ASCII


17

Saya perlu menulis beberapa data dari perhitungan, yang akan dibaca nanti oleh Paraview (file .vtu atau vtk).

Ketika datang ke ukuran file, haruskah saya memilih format ASCII atau format Biner?

Jawaban:


20

Jika satu-satunya kekhawatiran Anda adalah ukuran file, maka Anda menginginkan file biner. Sebagai contoh ilustratif, mari kita asumsikan Anda sedang menulis 1 angka floating point presisi ganda ke file. Mari kita asumsikan bahwa sistem file dapat menangani ini dengan sempurna dan memegang file, header, dan padding semuanya 0.

Untuk file biner, angka itu akan mengambil ukuran yang tepat dari angka dalam RAM, atau 8 byte.

Dalam format ASCII, itu akan menampung:

  • 16 digit alas
  • 1 periode untuk desimal
  • 1 char untuk membatasi eksponen
  • 1 char untuk tanda eksponen
  • 2-3 char untuk eksponen

Dengan asumsi hanya menggunakan 1 byte untuk sebuah karakter, Yaitu 22 byte untuk menampung angka yang sama. Ini tidak menghitung karakter yang diperlukan untuk melebur di antara angka (biasanya minimal 1). Oleh karena itu ukuran file untuk format ASCII akan sekitar 3 kali lebih besar.

Anda dapat berdagang dalam ukuran file untuk ketepatan dalam file yang disimpan (hanya menyimpan 5-6 digit di basis), tetapi itu tergantung pada apa Anda menggunakannya. Keuntungan utama ASCII adalah untuk debugging atau menghasilkan data yang dapat dibaca manusia.


3
Yang juga penting dalam arena ilmiah adalah pengarsipan jangka panjang dan berbagi yang dapat diandalkan, itulah sebabnya, meskipun tidak efisien, ASCII CSV begitu lazim dan direkomendasikan (PDF) .
horchler

2
Hal lain yang bermanfaat adalah bahwa meskipun pengkodean ASCII CSV tidak terlalu efisien, menggunakan utilitas kompresi file (seperti zip, gzip, dll.) Pada file ascii Anda biasanya akan membawa ukuran file ke sesuatu yang mirip dengan ukuran file biner .
Brian Borchers

3
Berhati-hatilah karena beberapa pustaka input / output tidak cukup hati-hati untuk mendapatkan sedikit demi sedikit reprodusibilitas saat Anda mengeluarkan angka-angka IEEE Double Precision di ASCII dan kemudian membacanya kembali. Dalam pengalaman saya, menggunakan 17 atau 18 angka desimal kadang-kadang diperlukan untuk keamanan .
Brian Borchers

5
Mengenai komentar horchler: Saya yakin format biner terbuka standar yang digunakan dengan baik seperti HDF5 akan ada untuk waktu yang lama. Itu yang saya pribadi sarankan.
AlexE

1
+ Saya tetap menggunakan binary jika memungkinkan, untuk akurasi, kekompakan, ketenangan pikiran, dan (terutama) kecepatan. Maka jika saya membutuhkan kekompakan lebih lanjut, saya bisa mengancingkannya. Jika saya harus dapat membaca konten secara visual, saya dapat menulis sedikit program untuk itu. Di sisi lain, jika lebih penting untuk menjadi visual, dan mudah berpindah ke program acak seperti Excel, R, dll. Maka CSV adalah cara yang harus dilakukan.
Mike Dunlavey

15

Dalam praktiknya, Anda jarang membutuhkan data dalam file visualisasi yang lebih akurat daripada, katakanlah, 3 digit yang valid. Dalam hal ini, ASCII - mungkin mengejutkan - seringkali lebih kompak daripada bentuk biner. Jika Anda berpikir tentang pengarsipan, maka bzip file ASCII ini kemungkinan akan menghasilkan file terkecil yang bisa Anda dapatkan.

Yang mengatakan, Paraview membaca format VTU yang memiliki bentuk biner terkompresi (berbasis XML, tetapi data pertama-tama dikompresi libz dan kemudian uuencoded lagi untuk menghasilkan teks ASCII). Pada file biasa, ini menyimpan faktor 4-10. Untuk file besar, ini jelas cara untuk pergi.


2
Saya memilih ini untuk kontras dengan jawaban lainnya. Saya juga tidak memiliki pendapat yang kuat, tetapi ada poin bagus yang bisa didapat di sini.
Bill Barth

Atau, secara eksplisit nol bit rendah dan kompres biner.
Jed Brown

Wow, itu akan membutuhkan sedikit mengotak-atik. Atau ada fungsi yang melakukan itu? (Selain casting untuk melayang dan kembali ke dobel.)
Wolfgang Bangerth
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.