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

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

ファイルサイズに関しては、ASCII形式とバイナリ形式のどちらを使用する必要がありますか?

回答

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

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

ASCII形式では、次のものが保持されます。

  • ベースの16桁
  • 10進数の1ピリオド
  • 指数を区切る1文字
  • 指数の符号に1文字
  • 指数に2-3文字

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

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

コメント

  • 科学分野でも重要なのは、長期的なアーカイブと信頼性です。共有するため、'の非効率性にもかかわらず、ASCIICSVは非常に普及しており推奨されています(PDF)
  • もう1つの便利な点は、ASCIICSVエンコーディングは'あまり効率的ではありませんが、asciiでファイル圧縮ユーティリティ(zip、gzipなど)を使用することです。 fileは通常、ファイルサイズをバイナリファイルのサイズと同様のサイズに縮小します。
  • 一部の入力/出力ライブラリは十分に注意していないため、注意してください' IEEE Double Precision番号をASCIIで出力し、それらを読み戻すときにビットの再現性を確保するため。私の経験では、安全のために10進17桁または18桁を使用する必要がある場合があります。
  • horchlerについて' sコメント:' HDF5など、よく使用され、標準化されたオープンバイナリ形式が長い間存在すると確信しています。それは'私が個人的に推奨する'です。
  • +正確さのために、可能な限りバイナリに固執します。コンパクトさ、安心感、そして(特に)スピード。さらにコンパクトにする必要がある場合は、圧縮できます。内容を視覚的に読めるようにする必要がある場合は、そのための小さなプログラムを書くことができます。一方、'視覚的であることがより重要であり、ExcelやRなどのランダムなプログラムに簡単に渡される場合は、CSVが最適です。

回答

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

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

コメント

  • 他の回答との対比のためにこれに投票しました。 'どちらにしても強い意見はありませんが、'ここで得られる良い点があります。
  • または、下位ビットを明示的にゼロにして、バイナリを圧縮します。
  • うわー、かなりのビット操作が必要になります。それともそれを行う関数はありますか? (floatにキャストしてdoubleに戻す以外。)

回答

tl; dr- ファイルをutf8 に保存します。表形式の場合は、TAB区切りの値を使用してください。

正しいオプションは次のとおりです。

  1. utf8 テキスト( ASCIIではありません。私たちはすべてアメリカ英語を話すわけではありません)
  2. バイナリ

ASAICTバイナリファイルの唯一の本当の利点は、パフォーマンスです。途中でテキストを生成したり、途中でテキストを解析したりするよりも、メモリダンプをメモリにロードする方がはるかに高速です。

例: https://www.cfd-online.com/Forums/openfoam/136983-binary-gives-significant-performance-advantage-mesh-solve.html

またはここ: https://auth0.com/blog/beating-json-performance-with-protobuf/ (これは科学的ではなく、全体的なパフォーマンスについて説明しています。大きな違いは、送信データの量と、テキストデータに偏った場合の解析時間です。 )

バイナリファイル形式がUnicodeテキストを適切にサポートする可能性は低いため、データの整合性が気になる場合は、binary

。エンディアンの問題についても聞いたことがありますか?符号付き整数と浮動小数点数の異なるバイナリ表現?

-100000と-1e + 6のテキスト表現は、に応じて値を変更しませんCPU上(utf-8およびASCIIで、とにかく)。

バイナリファイルを理解するプログラムがそれを理解するか、50年後も実行される可能性は不明であり、おそらく良くありません。 。寿命が気になる場合は、バイナリを使用しないでください

別のプログラムからバイナリデータを読み取るのは難しいことが多いため、相互運用性が気になる場合は、バイナリを使用しないでください

脇: CSVはひどいファイル形式です。シンプルですが、定義が不十分で、ステートフルパーサーが必要です。CSVは使用しないでください。必要な場合は、TSVを使用してください。シンプルですが、定義が適切で、解析が簡単です。

https://chriswarrick.com/blog/2017/04/07/csv-is-not-a-standard/

https://www.cloudbakers.com/blog/everything-you-didnt-want-to-have-to-know-about-csv

サイズが気になる場合は、compress

(圧縮されたバイナリ表現と圧縮されたバイナリ表現の相対的なサイズ効率の研究を探してここに来ました。テキスト。VRMLに関するこの調査以外に良い情報はまだ見つかりませんが、base64でエンコードされたバイナリとバイナリの比較であるかどうかさえわかりません。 https://www.cs.unc.edu/~isenburg/papers/is-bcraf-03.pdf 。)

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です