Ich habe viele Meshdaten die seit Jahrzehnten in eigenen Filetypen hinterlegt sind. Dieses sind quasi ZIP Files. Beim Lesen werden diese komplett in den Speicher geladen und da quasi entpackt und der entpackte Stream dann verarbeitet. Gut und schnell. Mit dem Nachteil (wir sind noch 32Bit & Windows unterwegs) das man bei großen Files natürlich kurzzeitig extra Speicher benötigt (gezippte und entzipped im Speicher).
Ich experimentiere etwas mit den gzip Funktionen. Also die Daten wie beim normalen FILE mit gzopen, gzwrite, gzread zu lesen. Gzip kümmert sich um das Packen/Entpacken und hat nur einen etwa 3MB Puffer Overhead (soweit ich gelesen hatte). Das klappt super, ausser das es langsamer läuft wie die ZIP Variante. Wohl wegen der kleinen Happen beim Lesen.
Daher die Idee ob man nicht das FILE als Byte (uint8_t) Daten komplett lesen kann (geht ja sehr schnell) und dann im Speicher den Stream mit gzip liest. Quasi Memory Cache des Files.
Code: Alles auswählen
ZEXTERN gzFile ZEXPORT gzopen OF((const char *path, const char *mode));
Das Ziel wäre das man die kleinen Files oder bei genug Speicher mit der schnellen Variante liest und nur große Files bei Speichermangel in Häppchen verarbeitet.
GGf. hat ja jemand eine Idee oder Suchbegriff wie man sowas kombinieren kann. Auch eine Alternative zu gzip wäre ja denkbar wenn diese robust wäre.