Format zip, deflate : obligé d'avaler les RFC ? - Divers - Programmation
Marsh Posté le 19-07-2005 à 18:56:06
Pitié
Bon, alors, je regarde le RFC 1950 (zlib) ou le 1952 (gzip) ? Parceque j'ai pas bien saisi lequel (si il y en a un) correpond au format zip. Si au moins ceci était clair, j'aurais plus qu'à serrer les fesses pour comprendre ce que ça raconte.
Marsh Posté le 20-07-2005 à 08:43:41
Il faudra que je réapprenne à suivre mon instinct plutôt que celui de google...
J'ai donc fini par trouver ce lien : http://www.pkware.com/company/stan [...] ppnote.txt
Souhaitez-moi bonne lecture
Marsh Posté le 20-07-2005 à 16:17:27
Mes rercheches avancent
Vous vous en battez probablement les reins, mais pour tout ce qui concerne la partie (dé)compression de données zip pr la méthode deflate, j'ai trouvé LA page : http://www.gzip.org/zlib/feldspar.html
Si ça peut être utile à certains...
Me reste à penser mes belles classes pour les arbres de Huffman, la recherche rapide dans le dictionnaire... En faisant en sorte de ne pas tomber sur un algo propriétaire
Marsh Posté le 24-07-2005 à 17:11:59
Tu as une bonne raison de ne pas utiliser la librairie zlib ?
Marsh Posté le 27-07-2005 à 16:02:57
Citation : 'ai pour mission de coder quelques classes C++ de compression/décompression zip |
Ca doit être un exo qui lui est demandé
Marsh Posté le 18-08-2005 à 22:40:57
Oups, je devrais venir plus souvent, désolé de n'avoir pas répondu plus tôt.
Alors oui, je suis en stage et je suis chargé de pondre des classes pour le format ZIP. La boîte veut ses propres outils, moi j'exécute
J'ai pas mal avancé, mais ça coince : en utilisant la compression deflate avec codage de huffman statique, je produis des blocs deflate que les logiciels courants ne savent pas décompresser
Pour l'instant, je sais produire un fichier zip avec son en-tête, un bloc de données compressées via deflate avec huffman statique, et le central directory qui va bien à la fin.
d'après ce que j'ai pigé, le bloc doit commencer par 3 bits d'en-tête : bit 0 à 1 (il n'y a qu'un bloc dont il est forcément le dernier) et bits 1 à 1 et 2 à 0 (01 : compression huffman statique). Suite à ces bits, j'écris tous mes codes de Huffman à l'envers (j'inverse les poids des bits)
Ainsi, si mon premier code de Huffman est 01100111, je dois avoir dans mon premier octet (poids fort à gauche) : 00110011 et dans mon second octet 00000111 (en rouge le premier bit d'en-tête, en bleu les deux suivants, en vert mon code de Huffman inversé.
Si il y a un connaisseur, qu'il ait la gentillesse de me dire si j'ai faux
Marsh Posté le 18-08-2005 à 22:44:15
v10ware a écrit : Alors oui, je suis en stage et je suis chargé de pondre des classes pour le format ZIP. La boîte veut ses propres outils, moi j'exécute |
Soit ils t'ont donné ça pour t'occuper soit
C'est pour quel genre d'appli ?
Marsh Posté le 18-08-2005 à 22:48:08
push a écrit : Soit ils t'ont donné ça pour t'occuper soit |
En gros, ils développent des barres avec 2 caméras à poser au dessus d'un mur ou d'une vitrine. On projette sur le mur un bureau windows ou autre, et les caméras suivent le doigt, pour qu'il agisse comme une souris.
Le soft qui gère ça a besoin de stocker des fichiers de configuration ou je ne sais trop quoi, ils veulent pouvoir compresser et empaqueter le tout.
Marsh Posté le 18-08-2005 à 22:52:08
Mis à part le cas de matos embarqués hyper spécifique voir très exigant c'est hallucinant d'aller recoder un truc pareil
Marsh Posté le 18-08-2005 à 22:54:11
Je me contenterai d'un support partiel
Pas de compression/décompression dynamique, un seul bloc deflate par fichier, copie intégrale de chaque fichier en mémoire pour compression, peu d'optimisation pour la compression LZ77, pas de paramétrage...
Ca dégrossit pas mal mais il en reste
Marsh Posté le 19-08-2005 à 07:34:47
Citation : |
A mon avis, tu as rien compris et tu dois utiliser zlib, quitte à encapsuler dans des classes. Vérifie avec ton chef. S'ils veulent redévelopper eux-même cette lib qui est utilisée partout depuis au moins 10 ans, c'est que tu as affaire à des crétins qui jettent leur argent par les fenêtres, vu que tu n'as pas l'air d'avoir de contraintes techniques particulières. Et toi tu perds ton temps. Ce n'est pas ça qui va leur donner le moindre avantage compétitif / concurrence, bien au contraire, quand le marketing voudra que ton code soit compatible avec les fichiers zippés actuels et qu'ils devront revoir ton code (à ce moment-là, ils switcheront à zlib).
M'étonne pas qu'ils prennent un stagiaire pour ça. C'est qui cette boite ?
Marsh Posté le 19-08-2005 à 08:25:21
el muchacho a écrit : A mon avis, tu as rien compris et tu dois utiliser zlib... |
Ton avis est de trop. Je sais très bien ce qui m'a été demandé et j'ai déjà discuté de l'utilisation des logiciels libres qui sont là pour ça, ce a quoi on m'a répondu "on veut posséder tout notre code source pour qu'il n'y ait aucun soucis". J'ai beau régulièrement revenir à la charge à propos de leur aveuglement, rien à faire.
Je n'ai pas mon mot à dire, on me demande de faire de la compression/décompression zip depuis zéro, c'est documenté et standard donc c'est faisable, donc ils veulent que je le fasse. Quitte à ce qu'ils réalisent plus tard leur stupidité, mais ce ne sera plus mon problème.
J'ai besoin de réponses sur des détails techniques, rien d'autre.
Marsh Posté le 19-08-2005 à 14:47:02
Problème résolu. Je voulais bien écrire les bits dans l'ordre qu'il fallait mais ma classe d'écriture de bits dans des octets était buggée, tous les codes fixes (et donc qui ne sont pas à inverser) étaient inscrits un peu n'importe comment).
J'arrive enfin à créer un fichier zip avec un seul fichier dedans
Marsh Posté le 19-08-2005 à 19:18:58
Pourtant on peut pas dire que la license de la zlib soit très compliquée http://www.zlib.net/zlib_license.html
Marsh Posté le 19-08-2005 à 23:13:09
v10ware a écrit : Ton avis est de trop. (bla bla bla) |
Et moi j'aimerais savoir le nom de cette boîte dirigée par une équipe de crétins, histoire d'éviter de leur envoyer mon CV (quitte à ce que ce soit en mail privé).
Marsh Posté le 19-07-2005 à 17:04:12
Bonjour à tous,
J'ai pour mission de coder quelques classes C++ de compression/décompression zip, dans le plus total respect des normes impliquées (compatibilité avec les logiciels du marché, gestion de mot de passe...).
Après quelques recherches, je n'ai pas trouvé LA page web décrivant l'intégralité du format d'un fichier zip standard. Tout au plus suis-je tombé sur le RFC 1951 décrivant la compression deflate, ainsi que les RFC 1950 et 1952 des formats de compression zlib et gzip (où est la nuance ?). Comme je trouve tout cela assez imbuvable et que j'ai encore moins envie de zieuter les sources des librairies libres existantes pour me faire une idée du schéma d'un fichier zip, pourriez-vous m'indiquer une source d'information relativement complète ?
Mon but n'est pas de pomper du code source à droite à gauche, je veux juste avoir une vision globale du format zip et des algorithmes en jeu.
Merci d'avance