2012-02-22 12 views
1

私はバイナリファイルに書きたいさまざまなオブジェクト(とobjecタイプ)の束を持っています。まず私は、ファイルがこのような構造にする必要があるすべての:バイナリファイルこのdoesnのビーイングjavaバイナリファイル操作

`オブジェクトTYPE1

obj1, obj2 ... 

オブジェクトタイプ2

obj1, obj2... 

....

ユーザーがそれを読むのを手伝ってくれませんが、構造体を持っているので、ファイル全体を解析するのではなく、型でオブジェクトを検索、削除、または追加することができます。そして、これは私がする方法を知らないものです。これも可能でしょうか?

+1

バイナリファイルの構造を理解していますか? 0と1だけが次々と存在します。 – tester

+0

1つのファイルだけを使用する理由はありますか?なぜオブジェクトごとに1つのファイルが受け入れられないのでしょうか? – ARRG

+0

構造体とは、ファイル全体ではなく、ファイルの一部にアクセスできるメソッドを意味します。 – MRM

答えて

1

各オブジェクトの位置と長さを示すために、ファイルの先頭(または他の場所)にヘッダーを維持する必要があります。

ヘッダーの種類とレイアウトは、ファイルの読み書き方法に大きく依存します。あなたが名前でオブジェクトを取得することを計画している場合たとえば、あなたはあなたのファイルで、この

object1 500 1050 
object2 1550 800 
object3 2350 2000 
<some padding to cover 500 bytes> 
<the 1050 bytes of object1><the 800 bytes of object2><the 2000 bytes of object3> 

のようなものを持っているとobject1ファイルのオフセット400で開始し、1050バイトの長さを持っていることを知っている可能性があります。

保存したいオブジェクトの種類が異なるようですので、ヘッダに追加のデータを追加する必要があります。

次の世話を:

  • ファイルを追加、削除またはmodifiyたびに、私はobject2は削除する場合(たとえば、後に続くすべてのファイルのオフセットをヘッダに更新する必要があります、 object3のオフセットは1550になります)。
  • あなたがデータと同じファイルのヘッダを格納する場合は、オフセットを計算するときに、あなたのアカウントにヘッダのサイズを取る必要があります(これは物事がはるかに困難になります、私はあなたがヘッダを維持し、バイナリデータを分離示唆している。
  • あなたはヘッダにあなたがオブジェクトにアクセスするたびに読み込み、解析する必要があります。問題(YMLまたはXML)を避けるために、あなたのヘッダーのための標準化された形式を使用することを検討してください。

私は認識していませんよこのような機能を実装するのに役立つライブラリがありますが、私はかなりあると確信しています。誰かがそれを提案できるかもしれません。

-

別の解決策は、(ネイティブのJavaによってサポートされています)ZIPファイルのようなものを使用してdifferenzのZipEntryとしてあなたのオブジェクトのそれぞれを記述することです。この方法は、あなたは、オブジェクト分離を自分で管理する必要がないだろう、とだけあなたが望む正確なのZipEntryを知って心配する必要があります。

+0

これらの手順を読む私は、オブジェクトの種類ごとにファイルを持つ方がはるかに簡単だとわかります。ファイルに追加できるので、オフセットを再計算する必要はありません – MRM

+0

おそらくオブジェクトごとのファイルオブジェクトタイプを独自のディレクトリにグループ化する(または名前接頭辞を使用する)ことができます。 – ARRG

+0

すべてのオブジェクトを1つにすると非常に多くのファイルが生成されます。アプリケーションを起動してメモリにロードするたびに読み込む必要があります.3または4で操作が少なくなります... – MRM