Qual é a melhor maneira de manter dados em um aplicativo Java Desktop?

Eu tenho uma grande árvore de objetos Java no meu aplicativo de desktop e estou tentando decidir a melhor maneira de persistir como um arquivo no sistema de arquivos.

Alguns pensamentos que tive foram:

Role meu próprio serializador usando DataOutputStream: Isso me daria o maior controle do que estava no arquivo, mas com o custo de microgerenciá-lo.

Serialização antiga direta usando ObjectOutputStream e suas várias classes relacionadas: Não estou vendendo, pois acho os dados frágeis. Alterar a estrutura de qualquer objeto quebra as instâncias serializadas dele. Então, estou preso ao que parece ser um pesadelo horrível de versionamento.

Serialização de XML: Não é tão quebradiço, mas é significativamente mais lento que a serialização direta. Pode ser transformado fora do meu programa.

JavaDB: Eu considerei isso desde que me sinto confortável escrevendo aplicativos JDBC. A diferença aqui é que a instância do banco de dados persistiria apenas enquanto o arquivo estivesse sendo aberto ou salvo. Não é bonito, mas ... ele se presta à migração para uma arquitetura de servidor central, se necessário, e introduz a possibilidade de consultar o modelo de dados de uma maneira mais simples.

Estou curioso para ver o que as outras pessoas pensam. E espero ter perdido alguma abordagem óbvia e mais simples do que as anteriores.

Aqui estão mais algumas opções selecionadas das respostas abaixo:

Um banco de dados de objetos - Possui significativamente menos infraestrutura do que as abordagens ORM e executa mais rapidamente que uma abordagem XML. obrigado aku

questionAnswers(6)

yourAnswerToTheQuestion