У меня есть RandomAccessFile в Java, где я управляю некоторыми данными.Упрощенно: в начале файла у меня есть индекс.(8-байтовое значение на каждый набор данных, которое представляет смещение, в котором можно найти реальные данные).
Так что если я хочу сейчас, где я могу найти данные набора данных № 3, например.Я прочитал 8 байтов по смещению (2 * 8).(Индексирование начинается с 0).
Сам набор данных состоит из 4 байтов, представляющих размер набора данных, а затем всех байтов, принадлежащих к набору данных.
Так что это прекрасно работает в случае, если явсегда переписывать весь файл.
Здесь очень важно, чтобы набор данных № 3 мог быть записан как первая запись в файле, так что индекс упорядочен, но не сами данные.
Еслия вставляю новый набор данных, я всегда добавляю его в конец файла.Но количество наборов данных, которые могут быть в одном файле, ограничено.Если я могу сохранить в файле 100 наборов данных, в индексе всегда будет 100 записей.Если смещение, считанное из индекса набора данных, равно 0, набор данных является новым и будет добавлен в файл.
Но есть один случай, который у меня еще не работает.Если я читаю набор данных нет.3 из файла, и я добавляю в него некоторые данные в своем приложении, и я хочу обновить его в файле, я понятия не имею, как это сделать.
Если он имеет ту же длину, что и раньше, я могу просто перезаписатьстарые данные.Но если новый набор данных содержит больше байтов, чем старый, мне придется переместить все данные в файле, который находится за этим набором данных, и обновить индексы для этих наборов данных.
Есть идеи, как это сделать?Или, может быть, есть лучший способ управлять хранением этих наборов данных в файле?
PS: Да, конечно, я думал об использовании базы данных, но это не применимо для моего проекта.Мне действительно нужны простые файлы.