C'est un problème délicat :
Tout d'abord, utiliser ObjectOutputStream
n'est probablement pas la réponse. Le format du flux inclut beaucoup de métadonnées liées au type. Si vous sérialisez de petits objets, les métadonnées obligatoires rendront difficile pour l'algorithme de compression de "s'équilibrer", même si vous implémentez des méthodes de sérialisation personnalisées.
Utiliser DataOutputStream
avec un minimum (ou pas du tout) d'informations de type supplémentaires donnera de meilleurs résultats, mais les données mixtes ne sont généralement pas compressibles de manière efficace en utilisant des algorithmes de compression généraux.
Pour une meilleure compression, vous devrez peut-être examiner les propriétés des données que vous compressez. Par exemple :
- Les objets de type
Date
pourraient être représentés en tant que valeurs int
si vous savez qu'ils ont une précision d'1 jour.
- Les séquences de valeurs de type
int
pourraient être codées en longueurs de course, ou codées en delta si elles ont les bonnes propriétés.
- et ainsi de suite.
Quelle que soit la manière dont vous le faites, vous devrez fournir un effort sérieux pour obtenir une quantité significative de compression. À mon avis, une meilleure idée serait d'écrire les objets dans une base de données, un magasin de données ou un fichier et d'utiliser un système de cache pour conserver en mémoire les objets utilisés fréquemment.