Вы должны будете поддерживать заголовок в начале файла (или где-то еще), чтобы отмечать положение и длину каждого из ваших объектов.
Вид и расположение заголовка во многом зависят откак вы планируете читать и писать в файл.Например, если вы планируете получать объекты по имени, вы можете иметь в своем файле что-то вроде этого
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 байт.
Поскольку кажется, что у вас есть различные типы объектов, которые вы хотите сохранить, вам, вероятно, потребуется добавить некоторые дополнительные данные в ваш заголовок.
Позаботьтесь о следующем:
- Каждый раз, когда вы добавляете, удаляете или модифицируете файл, вам придется обновлять в заголовке смещение для всех последующих файлов (например,если я удаляю object2, то смещение для object3 теперь равно 1550).
- Если вы сохраняете заголовок в том же файле, что и данные, то при вычислении смещений необходимо учитывать размер заголовка (этобудет намного сложнее, я предлагаю вам держать заголовок и двоичные данные разделенными.
- Вам придется читать и анализировать заголовок каждый раз, когда вы хотите получить доступ к объекту. Рассмотрите возможность использования стандартного формата для заголовка, чтобыизбегайте проблем (YML или XML).
Я не знаю ни одной библиотеки, которая поможет вам реализовать такую функцию, но я почти уверен, что есть такие. Может быть, кто-то сможет предложитьone.
-
Другим решением было бы использовать что-то вроде ZipFile (который изначально поддерживается Java) и записывать каждый из ваших объектов вОтличный ZipEntry.Таким образом, вам не придется самостоятельно управлять разделением объектов, и вам нужно будет только знать, какой именно ZipEntry вы хотите.