• 締切済み

オブジェクトのバイナリ保存

アプリケーションで扱うデータの保存方法を模索中なのですが iniファイルやxmlファイルのような形式ですと、テキストファイルで変更することができるので BinaryFormatterを使用してバイナリで保存しようと考えています。 そこで、iniファイルやxmlのようにテキストファイルで保存する場合と BinaryFormatterを用いてバイナリ形式で保存する場合を比較したとき、 どちらの方が処理的に有利(処理が早い、軽いなど)とかあるのでしょうか? また、何度も何度もファイルへの書き込み処理が発生する場合、 どちらの方が処理的に有利(処理が早い、軽いなど)とかあるのでしょうか? 以上、よろしくお願いします。 環境 .NET FrameWork 2.0

みんなの回答

  • BLK314
  • ベストアンサー率55% (84/152)
回答No.4

一般的なテキストファイルとバイナリファイルの特徴を比較しています テキストファイル 長所 人間にやさしい。 人間が読める文字列がそのまま格納できるので、 ファイルの内容を人間が理解しやすい 柔軟性がある 文字コードはASCIIにしろUnicodeにしろ国際的に決まっています。 CPUやコンパイラなどに依存しません。 もちろん、Unicodeなどの多バイト文字の場合、 バイトの並び順が気になるわけですが、 そこは2バイト単位できっちりアクセスするようにするなど 手順を守ればOSやコンパイラ、ライブラリなどが吸収してくれるはずです。 短所としては メモリ・ファイル容量をたくさん消費します。 123を書き込むのに最低でも(終端を除いても)3バイト使ってしまいます。 バイナリならたった1バイトです (ただし、後に説明する"アライメント"を除きます) 容量が大きいとディスクアクセスも長くなります (比例するわけではありません。ディスクのセクタサイズ等の影響を受けるので 1バイトのアクセスと3バイトのアクセスが全く同じ時間だったりしますが、 傾向として、ファイルサイズが大きいと時間がかかるようになるのは事実です) バイナリの長所/短所はちょうどテキストと裏腹になります 長所 コンピュータにやさしいことです。 読み取ったデータはCPUが直接理解できる形なので ファイルのデータを読みとり計算したりするのに最適です。 また、音楽、映像などデータの種類をとわないのもメリットです 反面 人間にやさしくないです。 メモ帳などのテキストエディタでは何が書いてあるかわかりません。 バイナリ・エディタを使えば16進やASCII表示もできたりするので 多少は楽になりますが、特に数値の部分は計算しないとわからず、 直観的ではありません。 また、CPUやコンパイラの影響をもろに受けてしまい 柔軟性がありません。 コンパイラによっては2バイト境界・4バイト境界等にデータをそろえるため ダミーのデータを追加することがあります (アライメント) もちろんこうすることでCPUが高速に処理できるようになるわけですが、 ファイルを読み取る際にはアライメントを気にしなければなりません。 1つのプログラム専用とかであれば気にしなくてもよいですが 他のプログラムで読み書きさせるには注意が必要です。 アライメントの影響を避けるために ダミーをセットすることを許さず、きちきちにデータを詰めさせる方式も よく使われます。 この場合、バイナリの最大の売りの一つ ”データの高速アクセス" が犠牲になります (それでもテキストよりは断然速いですが) このように 両者それぞれに特徴があるので 無理やりどちらかに統一するのでなく 役割分担させるいわば"ハイブリッド方式"もよく見かけられます。 典型は HTMLやXMLです どうせコンピュータ処理させるのが前提のファイルなので タグも含めて全部バイナリでもよさそうです。 確かに効率だけを考えればそうかもしれませんが テキストファイルの融通性(多くのマシンで互換性がある)や 人間による修正などが簡単にできる魅力も捨てがたいです。 かといって 画像ファイルなども全部文字列になおして 完全テキスト化したのではファイルが大きくなりすぎます。 それに画像などのバイトが文字列で簡単に編集できても あまり意味がありません そこで、あのような形になっています 要は 適材適所 ということです。

すると、全ての回答が全文表示されます。
回答No.3

OSが取り扱いやすいサイズ(4096Kとか)で読み書きするのが とても効率がいいです。 =バイナリのが早いです。 データベースをiniファイルでもった日にはエライことになります。 編集云々は、最悪編集用のツールを作ってしまえば済みます。

すると、全ての回答が全文表示されます。
  • wathavy
  • ベストアンサー率22% (505/2263)
回答No.2

テキストが一番楽ですよ。 後で変更が可能なので、自分がデバッグする際にも楽です。 処理に時間がかかるかというと、無視できるくらいだと思います。MFCのCFileであれば、勝手にバッファリングしてくれていますから、処理への負荷はかからないと思います(間違いかも)。 XPが出たてのころから、ASCIIでファイル保存をしていますが、影響があるとは思えないスピードです。 最近、保存形式はライブラリなので不明ですが、2.5Mbyteもの画像データの書き込みをしながら動作させている処理がありますが、平気で動いています。(別な問題は抱えていますが、大きいファイルを書くことは問題にはなってないです)

すると、全ての回答が全文表示されます。
  • ttega
  • ベストアンサー率52% (9/17)
回答No.1

一般にはバイナリの方が効率がよいです。テキストや XML にフォーマットする処理に加えて、読み書きするデータ量も増えることから、データ量が多くなってくると差が顕著になります。

すると、全ての回答が全文表示されます。

関連するQ&A