Formati di compressione con un buon supporto per l’accesso casuale all’interno degli archivi?

Questo è simile a una domanda precedente , ma le risposte non soddisfano i miei bisogni e la mia domanda è leggermente diversa:

Attualmente utilizzo la compressione gzip per alcuni file molto grandi che contengono dati ordinati. Quando i file non sono compressi, la ricerca binaria è un modo pratico ed efficace per supportare la ricerca di una posizione nei dati ordinati.

Ma quando i file sono compressi, le cose si complicano. Recentemente ho scoperto l’opzione Z_FULL_FLUSH zlib , che può essere utilizzata durante la compressione per inserire “punti di sincronizzazione” nell’output compresso ( inflateSync() può quindi iniziare a leggere da vari punti nel file). Questo è OK, anche se i file che ho già dovrebbero essere ricompressi per aggiungere questa funzione (e stranamente gzip non ha un’opzione per questo, ma sono disposto a scrivere il mio programma di compressione se devo).

Da una fonte sembra che persino Z_FULL_FLUSH non sia una soluzione perfetta … non solo non è supportato da tutti gli archivi gzip, ma l’idea stessa di rilevare i punti di sincronizzazione negli archivi può produrre falsi positivi (sia per coincidenza con il numero magico per punti di sincronizzazione, o dovuto al fatto che Z_SYNC_FLUSH produce anche punti di sincronizzazione ma non sono utilizzabili per l’accesso casuale).

C’è una soluzione migliore? Mi piacerebbe evitare di avere file ausiliari per l’indicizzazione, se ansible, e il supporto predefinito esplicito per l’accesso quasi casuale sarebbe utile (anche se a grana grossa) come essere in grado di iniziare a leggere ad ogni intervallo di 10 MB). Esiste un altro formato di compressione con un migliore supporto per le letture casuali rispetto a gzip?

Modifica : come ho detto, desidero fare una ricerca binaria nei dati compressi. Non ho bisogno di cercare una posizione specifica (non compressa) – solo per cercare con una granularità grossolana all’interno del file compresso. Voglio solo il supporto per qualcosa del tipo “Decomprimi i dati iniziando all’incirca del 50% (25%, 12,5%, ecc.) In questo file compresso”.