バイナリファイルとASCIIファイルのサイズ


17

計算からいくつかのデータを書き込む必要があり、後でParaview(.vtuまたはvtkファイル)によって読み込まれます。

ファイルサイズに関して言えば、ASCII形式とバイナリ形式のどちらを使用すべきですか。

回答:


20

ファイルサイズだけが心配な場合は、バイナリファイルが必要です。説明のための例として、1つの倍精度浮動小数点数をファイルに書き込んでいると仮定しましょう。ファイルシステムがこれを完全に処理でき、ファイル、ヘッダー、およびパディングがすべて0であると仮定します。

バイナリファイルの場合、その数値はRAM内の数値の正確なサイズ、つまり8バイトになります。

ASCII形式では、以下を保持します。

  • 基数16桁
  • 小数の1ピリオド
  • 指数を区切る1文字
  • 指数の符号に1文字
  • 2〜3文字の指数

文字に1バイトのみを使用すると仮定すると、同じ数字を保持するのに22バイトです。これは、数字を区切るのに必要な文字をカウントしません(通常は少なくとも1)。したがって、ASCII形式のファイルサイズは約3倍大きくなります。

保存されたファイルの精度とファイルサイズを交換できます(ベースに5〜6桁のみを保持します)が、それは使用目的によって異なります。ASCIIの主な利点は、人間が読み取れるデータをデバッグまたは生成することです。


3
科学分野でも重要なのは、長期アーカイブと信頼できる共有です。そのため、非効率ではありますが、ASCII CSVが広く普及し推奨されています(PDF)
-horchler

2
もう1つの便利な点は、ASCII CSVエンコードはあまり効率的ではありませんが、ASCIIファイルでファイル圧縮ユーティリティ(zip、gzipなど)を使用すると、通常、ファイルサイズがバイナリファイルのサイズに近いものになります。
ブライアンボーチャーズ

3
一部の入力/出力ライブラリは、ASCIIでIEEE倍精度の数値を出力し、それらを読み戻すときにビットの再現性を確保するのに十分な注意を払っていないため、注意してください。 。
ブライアンボルチャーズ

5
horchlerのコメントに関して:HDF5などのよく使われている標準化されたオープンバイナリフォーマットは、長い間使用されているはずです。それは私が個人的にお勧めしたいことです。
AlexE

1
+精度、コンパクトさ、心の安らぎ、そして(特に)速度のために、可能な限りバイナリに固執します。さらにコンパクトにする必要がある場合は、圧縮できます。内容を視覚的に読み取れるようにする必要がある場合は、そのための小さなプログラムを作成できます。一方、視覚的であることがより重要であり、Excel、Rなどのランダムプログラムに簡単に渡される場合は、CSVが最適です。
マイクダンラベイ

15

実際には、たとえば有効な3桁よりも正確な視覚化ファイルのデータはほとんど必要ありません。その場合、ASCIIは、おそらく驚くべきことに、多くの場合、バイナリ形式よりもコンパクトです。アーカイブについて考えている場合、これらのASCIIファイルをbzip圧縮すると、取得できる最小のファイルが生成される可能性があります。

とはいえ、Paraviewは圧縮されたバイナリ形式のVTU形式を読み取ります(XMLベースですが、データは最初にlibzで圧縮され、次にuuencodeされてASCIIテキストが生成されます)。通常のファイルでは、これにより4〜10倍節約されます。大きなファイルの場合、これが間違いなく進むべき方法です。


2
他の答えとは対照的に、私はこれに賛成票を投じました。私はどちらの方法でも強い意見はありませんが、ここには良い点があります。
ビル・バルト

または、低ビットを明示的にゼロにし、バイナリを圧縮します。
ジェドブラウン

うわー、それはかなりいじる必要があります。または、それを行う関数はありますか?(フロートにキャストしてダブルに戻す以外。)
ウォルフガングバンガース
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.