各オブジェクトの位置と長さを示すために、ファイルの先頭(または他の場所)にヘッダーを維持する必要があります。
ヘッダーの種類とレイアウトは、ファイルの読み書き方法に大きく依存します。あなたが名前でオブジェクトを取得することを計画している場合たとえば、あなたはあなたのファイルで、この
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と1だけが次々と存在します。 – tester
1つのファイルだけを使用する理由はありますか?なぜオブジェクトごとに1つのファイルが受け入れられないのでしょうか? – ARRG
構造体とは、ファイル全体ではなく、ファイルの一部にアクセスできるメソッドを意味します。 – MRM