Я не знаю, почему в сериализации Java отказали, это совершенно жизнеспособный механизм.
Из исходного поста не понятно, но все ли 2G данных в куче одновременно? Или ты что-то еще выбрасываешь?
Сериализация из коробки не является «идеальным» решением, но если вы реализуете Externalizable на своих объектах, Serialization может работать просто отлично. Сериализация требует больших затрат, чтобы понять, что писать и как писать. Внедряя Externalizable, вы берете эти решения из-под контроля, тем самым значительно повышая производительность и экономя пространство.
Хотя ввод-вывод является основной стоимостью записи больших объемов данных, побочные затраты на преобразование данных также могут быть очень дорогими. Например, вы не хотите преобразовывать все свои числа в текст, а затем обратно, лучше, если возможно, сохранить их в более "родном" формате. ObjectStream имеет методы для чтения / записи собственных типов в Java.
Если все ваши данные предназначены для загрузки в единую структуру, вы можете просто сделать ObjectOutputStream.writeObject (yourBigDatastructure) после того, как вы реализовали Externalizable.
Однако вы также можете перебирать свою структуру и вызывать writeObject для отдельных объектов.
В любом случае вам понадобится некоторая подпрограмма «objectToFile», возможно, несколько. И это действительно то, что обеспечивает Externalizable, а также структура для обхода вашей структуры.
Другой проблемой, конечно же, является управление версиями и т. Д. Но поскольку вы сами реализуете все процедуры сериализации, у вас также есть полный контроль над этим.