Ceci est similaire à une précédente question, mais les réponses ne satisfont pas à mes besoins et ma question est un peu différente:
Actuellement, je utiliser la compression gzip pour certains de très gros fichiers qui contiennent des données triées. Lorsque les fichiers ne sont pas compressés, binaire de recherche est un outil pratique et efficace pour soutenir la recherche d'un emplacement dans les données triées.
Mais lorsque les fichiers sont compressés, les choses deviennent difficiles. J'ai récemment découvert sur zlib's Z_FULL_FLUSH
option, qui peut être utilisé lors de la compression d'insérer des "points de synchronisation" dans le comprimé de sortie (inflateSync()
pouvez alors commencer la lecture à partir de différents points dans le fichier). C'est OK, mais les fichiers j'ai déjà devrait être recomprimé à l'ajout de cette fonctionnalité (et étrangement gzip
n'est pas une option, mais je suis prêt à écrire mon propre programme de compression si je doit).
Il semble d'après une source que même Z_FULL_FLUSH
n'est pas une solution parfaite...non seulement il n'est pas pris en charge par toutes les archives gzip, mais l'idée même de détecter les points de synchronisation dans les archives peut produire des faux positifs (soit en coïncidence avec le nombre magique pour les points de synchronisation, ou en raison du fait qu' Z_SYNC_FLUSH
produit également des points de synchronisation, mais ils ne sont pas utilisables pour un accès aléatoire).
Est-il une meilleure solution? J'aimerais éviter d'avoir des fichiers auxiliaires pour l'indexation, si possible, et explicite, par défaut pour l'quasi-random access serait utile (même si c'est gros-grain--comme être en mesure de commencer à lire à chaque 10 MO d'intervalle). Est-il un autre format de compression avec un meilleur support pour les lectures aléatoires que gzip?
Edit: Comme je l'ai mentionné, je souhaite faire une recherche binaire à données compressées. Je n'ai pas besoin de demander à un particulier (non compressé) position--uniquement pour chercher à grossier de granularité dans le fichier compressé. Je viens de veulent de l'aide pour quelque chose comme "Décompresser les données de départ d'environ 50% (25% à 12,5%, etc.) dans ce fichier compressé."