[ Megoldva ] Arduino: gzip olvasása a teljes fájl kitömörítése nélkül

Miután az AI mondott három - egymásnak természetesen ellentmondó - megoldást, és egyikkel sem sikerült, valamint az általam talált programok példái is csak a teljes fájlok kicsomagolását tartalmazták, remélem, van itt valaki, aki már csinált ilyet, és el tudja mondani, hogyan is kellene.

Ha jól tudom, a gzip pont ilyen tömörítő, ami kisebb csomagokban röptében írható és olvasható is.

Alternatív megoldásként szóba jöhet más, nem egzotikus tömörítés is, amivel ezt könnyen el lehet játszani.

Hozzászólások

Miért is nem jó zcat avagy gunzip -c ?

Egy mikrokontrolleres példa: <font size=small>zcat filenev | sed -n '3,13p'</font>

Komolyabban mondva, ezt a komponenst kell beüzemelni az illető készüléken: https://www.zlib.net/

Ilyesmi függvények vannak benne:

gzFile gzopen(const char *path, const char *mode);
int gzread(gzFile file, voidp buf, unsigned len);
int gzclose(gzFile file);

Esetleg egy ilyen: https://github.com/pfalcon/uzlib

A tömörítők tipikusan stream alapúak. Magyarul mindig az elejétől kezdve tudod csak kiolvasni. Nem kell beolvasni mindet a memóriába, az elejét eldobhatod, a végét kihagyhatod. Ha több fájlod van egy archívumban, pl. ZIP vagy RAR, akkor lehet fájlonként hozzáférni.

Van 32kByte RAM-od hozzá? Mert egy standard zip-nek ennyi a sliding window mérete, azaz ennyit vissza kell tudnod olvasni belőle, azt meg hatékonyan RAM-ban lehet. Meg az összes unzip lib RAM-ban is csinálja.

Nem vagyok benne biztos, hogy jo otlet. Ezekben eleg keves RAM van, plusz a FS - ha mondjuk SD kartyarol jon a tomoritett adat - is foglal (fel kB/sector).

Minek?

A strange game. The only winning move is not to play. How about a nice game of chess?

Szerkesztve: 2024. 11. 13., sze – 20:17

Amit keresel, az a zlib példaprogramja, a zpipe.c, pontosan arra való, amit kérdezel. Ez úgy néz végig egy gzip streamet, hogy egyszerre mindig csak 16K van belőle kicsomizva.
(A zpipe parancssori kapcsolókkal és gzip fejléckezeléssel feltúrbózótt változata is kismillió példányban van fenn a github-on. Ugye az RFC szabványos deflate többféle fejléccel is használatban van, van a PKZIP (változó méretű), a zlib-es (2 bájt), meg a gzip fejléc (változó méretű, de legalább 10 bájt), a zlib-es iskolapélda fejléc nélküli streamhez való.)