Если возможно, несериализуемые части могут быть установлены как переходные
private transient SomeClass myClz;
В противном случае вы можете использовать Kryo . Kryo - это быстрая и эффективная инфраструктура сериализации графов объектов для Java (например, JAVA-сериализация java.awt.Color требует 170 байтов, Kryo - только 4 байта), которая может сериализовать также не сериализуемые объекты. Kryo также может выполнять автоматическое глубокое и мелкое копирование / клонирование. Это прямое копирование с объекта на объект, а не object->bytes->object
.
Вот пример, как использовать kryo
Kryo kryo = new Kryo();
// #### Store to disk...
Output output = new Output(new FileOutputStream("file.bin"));
SomeClass someObject = ...
kryo.writeObject(output, someObject);
output.close();
// ### Restore from disk...
Input input = new Input(new FileInputStream("file.bin"));
SomeClass someObject = kryo.readObject(input, SomeClass.class);
input.close();
Сериализованные объекты можно также сжать, зарегистрировав точный сериализатор:
kryo.register(SomeObject.class, new DeflateCompressor(new FieldSerializer(kryo, SomeObject.class)));