Streamzip

Soyez le premier à donner votre avis sur cette source.

Vue 11 439 fois - Téléchargée 2 594 fois


Description

Compression / Décompression de fichiers via memorystream (en utilisant la bibliothèque zlib)

Conclusion :


Je voudrais comprendre pourquoi je dois transférer mon stream compressé dans un autre avant de l'ajouter à mon stream de sauvegarde ? Je n'ai pas eu le temps (et le courage) de me plonger dans le code de la zLib, peut être qu'effectivement la compression passe par des accès fichiers. Je n'arrive pas à dire si c'est vraiment plus rapide (mais il me semble quand même)...

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
1
Date d'inscription
jeudi 14 août 2008
Statut
Membre
Dernière intervention
16 août 2008

je trouve ça trés interressant, je suis novice en la matiere, voire même "trés", et pourtant j'aimerais que l'on m'aide car j'ai des fichiers .res, .gcf, .dat, .trk, .bin, dont j'aimerais connaitre leurs contennus, j'ai essayer les editeurs de ressources, reshack, Restorator 2007 sans grand succés, la base de registre parle de var, je ne vous cacherez-pas que se sont des fichiers d'un jeux "Viper Racing", dans un site j'ai pu trouver un tool Rescrack que j'ai essayer et tjrs sans succés, soit il manque quelque chose, soit je ne suis pas guider, si vous pouvez m'aider Merçi beaucoup.
Salut à tous,
Un flux, delphiment parlant ^^ (TStream) est un moyen d'accéder à une ressource.
Après, un stream pointe vers les données que l'on veut lire (ou écrire).
Donc, si on a un flux fichier (TFileStream), on consomme de l'espace disque car les données seront stockées sur le disque dur.
Si on a un flux mémoire (TMemoryStream mais aussi TStringStream), on consomme de l'espace mémoire (de la RAM) !

En gros, dans tous les cas, tu consomme de l'espace (logique). Après, ce qu'il faut voir, c'est l'utilisation que tu veux en faire. Pour des traitements, on préfère le TMemoryStream car les temps d'accès et de lecture/écriture de la RAM sont très faibles : gain de performance.
Pour des données persistantes, on utilise un TFileStream.

Dans tous les cas, le flux se manipule de la même façon (merci l'abstraction et le polymorphisme des classes de Delphi ^^)
Messages postés
400
Date d'inscription
samedi 6 août 2005
Statut
Membre
Dernière intervention
11 février 2016
1
Pour la question de rapidité, j'ai peut etre une explication. Ta compression utilise un algorithme donc de la ressource Memoire. Si tu utilise un TMemorystream tu utilises de la mémoire aussi : tu en consommes plus sans parler du fait qu'il faut la gérer. Donc ca pourrait etre une explication.

Quand on reste je prendrai le soin de le lire mais quand j'aurais un peu de temps donc c'est pas vraiment pour tout de suite.
Messages postés
1284
Date d'inscription
mardi 28 octobre 2003
Statut
Contributeur
Dernière intervention
3 juillet 2015
13
Francky,

Merci pour ta réponse. Malheureusement, il reste des zones d'ombre... (aaaaaaaaaaaaarrrrrrgghhhhhhhhhhh)
1) Voilà ce que j'ai trouvé dans l'aide Delphi : "TMemoryStream permet de stocker des données dans un tampon de mémoire vive disposant de possibilités similaires à celles d'un fichier." . Et si on regarde l'exemple fournit, le programme enregistre les données d'une listbox dans un memorystream, revient en position 0 et recharge les données du memorystream dans la listbox. La question que je me pose donc est : Est-ce que, par abus de langage, le memorystream serait équivalent aux données stockées en mémoire ? Sinon, comment atteindre ces données ?

2) Dans la source, j'ai légèrement modifié la méthode de compression, en laissant tomber le FileStream qui ne travaille effectivement pas en mémoire (-> ça c'est admis, un point pour toi... :) ). Je le remplace par des memorystream ... Or, surprise ! la compression est moins rapide ! Une explication ? (je publie le code dès que possible)
Messages postés
400
Date d'inscription
samedi 6 août 2005
Statut
Membre
Dernière intervention
11 février 2016
1
Salut Simon,

Tu as posté ce source dans le but que l'on puisse t'aider à répondre à des interrogations que tu te posais sur les streams. Tu aurais du faire un source un peu moins copieux : perso vu la taille j'hésite un peu à me lancer dedans. En plus cet exemple ne me semble pas judicieux pour répondre à tes interrogations dans la mesure ou tu fais un mixage de streams et de buffer (j'ai lu en diagonale quand meme ^^).

Tu arrives pas à comprendre (ou à admettre) qu'un stream n'est pas une donnée mais un Flux. Pose toi juste une question : qu'est ce que l'on sait compresser ?? des variables, des classes, des objets, des streams, des données ??

Je vais simplement te prendre un exemple : un TFileStream qui a été crée n'utilise pas de "ressources mémoire.". Si un stream était une donnée ca ne serait pas le cas.

Si on pouvait compresser des streams à la volée tu penses bien que tout le monde ferait ca. Tiens je te pose une question : image un bitmap compressé. Penses tu pouvoir l'afficher dans un TImage via un stream directement ou es tu obligé de le décompresser préalablement ?? Conclusion ??

Voila A+
Afficher les 9 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.