Java: каков наилучший способ записи элементов данных объекта в файл?

Я нахожусь в середине проекта Java, где одна из вещей, которые мне нужно сделать, чтобы заставить его работать, это писать и читать объекты с диска. В частности, мне нужно написать, а затем позже загрузить элементы данных данного объекта из одного RandomAccessFileс фиксированными записями для каждого объекта. Этот файл представляет собой раздел с дисковыми блоками фиксированного размера.

Теперь то, что я сделал, это явно преобразовать каждый элемент данных в байты с помощью ByteBuffer. Затем я записал их в файл, что позволило позднее перезагрузить данные для создания экземпляра нового объекта с идентичными значениями для его элементов данных. Что мне не нравится в этом подходе, так это то, что каждый элемент данных должен быть явно преобразован и помещен вByteBuffer, а затем записан. Загрузка делает прямо противоположное, Преобразуя все байты обратно и сохраняя их в объекте соответствующего типа.

Подход, который я использовал выше, кажется слишком запутанным. Есть ли лучший способ, более простой способ? То, что я думал о чем-то похожем на то, что вы можете сделать я делаю в C++. В прошлом я сохранял и перезагружал данные объекта из индексированных записей фиксированного размера довольно легко, используя указатель на объект, а затем записывал все байты оттуда с ofstream(или подобным), после приведения указателя к const char *использованию reinterpret_cast. Загрузка файла с ifstream(или похожим) была так же проста, просто используя индекс * sizeOf(Foo)для вычисления смещения указателя файла, а затем ищет перед чтением в память из файла.

Есть ли что-то похожее на этот подход в Java?

1 ответ

  1. Похоже, что вы ищете ObjectOutputStream, который позволяет сериализовать произвольные (но должны реализовать Serializable) объекты в массив байтов (или в этом случае поток), который затем может быть записан на диск. Это само по себе не будет поддерживать ваши потребности в случайном доступе, но это будет хорошей частью решения, которое не требует пользовательских адаптеров.