2016-12-11 5 views
0

バイナリフォーマッタを使用して複数のオブジェクトをファイルにシリアル化しようとしています。バイナリフォーマッタを使用してバイナリファイルの中間を読む

ファイルが非常に大きいので、ファイルの途中から特定のオブジェクトが必要な場合は、ファイル全体を逆シリアル化しないことをお勧めします。

これを行う方法はありますか?別のシリアライザを使用しますか?
同じ場所でオブジェクトを変更することもできますか?

+1

ファイルがBinaryFormatterで作成された場合、そのオブジェクトを元に戻すことはできませんが、途中のオブジェクトの読み込みを開始する方法はありません。 – rene

+0

あなたは別のformmaterを知っていますか?またはこれを手動で実施する必要がありますか? –

+1

Sqliteのような軽量データベースの使用を検討してください。 –

答えて

1

TL; DR:

  • は、あなたがこのような何かを実装していない/ conjoinすべて
  • でファイルを圧縮する必要があるかどうかを決める自分
  • 使用.NETのZIPファイルクラス

ファイルをストリームとして再度開くと、ストリームのSeekメソッドを使用して希望の位置(どこかに覚えておく必要があります)に移動し、次に必要なバイト数を読み出すことができます覚えておくか、マーカーのビットでファイルの終わりをマークする必要もあります)。ファイルを変更することも非常に楽しいでしょう。

しないでください!あなたは悪いtar同等を書いているはずだ、と他の人の多くは、すでにそれを行って、より良いています

はまた、.NETのバイナリことに注意してくださいシリアライゼーションは、それ以降の.NETバージョンでは読み込みが保証されていません。これは一時的なものであり、データのアーカイブではありません。これはあなたにとって重要なことであり、考慮すべきもう一つのことです。

どのようにファイルを使っているのかわかりません。あなたはそれを望まない/する必要がないかもしれません - ディスク上のものを個々のファイルとして保存する方が良いかもしれません。実際には単一のファイルとしての圧縮/保存があれば、外部の依存関係がないので、.NETのZipFileクラスから始めることをお勧めします。

関連する問題