Importations de données compressées
Bonjour,
Je suis actuellement en train de développer une application demandant de charger pas mal de données depuis un serveur.
Afin de réduire le temps de chargement, j'aurais aimé envoyer les données compressées (en zip).
J'ai fait quelques recherches sur des librairies faisant la décompression des fichiers, mais j'aurais aimé avoir votre avis, dans le cas où quelqu'un les avaient déjà expérimentées.
Je suis actuellement en train de développer une application demandant de charger pas mal de données depuis un serveur.
Afin de réduire le temps de chargement, j'aurais aimé envoyer les données compressées (en zip).
J'ai fait quelques recherches sur des librairies faisant la décompression des fichiers, mais j'aurais aimé avoir votre avis, dans le cas où quelqu'un les avaient déjà expérimentées.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Est-ce que cette librairie permet de déziper un NSData reçue depuis un serveur distant?
Et ta phrase "ce qui implique l'enregistrement du fichier sur le téléphone ou le mac" ne veut rien dire. Tu reçois tes data sous forme de NSData. Rien que le fait de recevoir tu enregistres en local ... Tu ne vas faire que transformer de la farine en baguette
Genre tu reçois des NSData depuis un socket ou un WebService ou autre, si tu peux décompresser le flux NSData directement, et créer les fichiers directement décompressés sur le disque c'est quand même mieux ! Plutôt que de devoir écrire sur le disque les NSData représentant ton flux compressé, puis lancer la décompression sur le fichier créé (qui va devoir lire ce fichier en mémoire alors que tu l'avais déjà avant) pour créer les fichiers décompressés compris dans le ZIP, et enfin supprimer le ZIP dont tu n'as plus besoin... ce qui serait un peu de l'overkill si tu peux éviter... d'autant que c'est débile puisque la lib de décompression fonctionne forcément avec des buffers d'octets qu'il décompresse, donc grosso-modo des NSData.
Je vais voir si je peu remanier la librairie.
Reprise de l'extraction liée justement à la reprise du download ? Tu n'as pas peur qu'il y ait des risques de perte ?
La connexion serveur permet de garder les informations à jour mais si l'utilisateur est en mode "déconnecté" je passe par une base de donnée en SQLite qui, par contre, n'est pas forcément à jour avec le serveur.
Je m'en suis servi pour lire des fichiers ePub.
Faut mettre les mains dans le cambouis !
Code C++ :
Cette librairie compresse/décompresse au format zip , indépendamment du format pkzip, elle est donc toute indiquée pour décompresser des données brutes.
À voir ensuite comment demander les parts manquantes au serveur pour faire de la reprise.
Petit soucis, bien que mon zip soit valide, je reçois toujours la même erreur "invalid stored block lengths".
Je vous avouerais avoir un peu de mal à comprendre ce qui se passe ... Quelqu'un aurait une idée d'où cela pourrait venir?
Je vous met ci-dessous le code pour le inflate.
Dans le cas où quelqu'un rechercherais la même solution, j'ai donc utilisé https://github.com/FivesquareSoftware/ZipKit qui utilise la librairie libz et permet quelques autres fonctionnalités avancées.
Une fois les données reçues, j'initialise un objet ZKDataArchive (représentation objet d'une archive) puis lance la décompression.
http://code.google.com/p/objective-zip/
C'est une surcouche objc sur zlib.