STREAMZIP

cs_hafou Messages postés 29 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 décembre 2016 - 29 juin 2006 à 19:52
sopalu Messages postés 1 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 16 août 2008 - 16 août 2008 à 14:25
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/38338-streamzip

sopalu Messages postés 1 Date d'inscription jeudi 14 août 2008 Statut Membre Dernière intervention 16 août 2008
16 août 2008 à 14:25
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 ^^)
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 juin 2006 à 13:08
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.
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
30 juin 2006 à 10:29
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)
Francky23012301 Messages postés 400 Date d'inscription samedi 6 août 2005 Statut Membre Dernière intervention 11 février 2016 1
30 juin 2006 à 06:03
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+
sp40 Messages postés 1276 Date d'inscription mardi 28 octobre 2003 Statut Contributeur Dernière intervention 3 juillet 2015 15
30 juin 2006 à 01:02
-> Hafou : pas eu le temps de peaufinner

-> cirec : Le but n'est pas de faire un fichier plus petit que celui que peut faire winrar, ni de faire un fichier compatible avec les autres outils de compression, mais de tester une compression avec un memorystream. Elle fait suite à mes remarques sur la source des sauvegardes binaires de Caribensila.
Sinon, effectivement, dans l'absolu cette source ne sert à rien ;)

-> shining : merci pour l'info, je vais voir... mais il m'a déjà été reproché d'utiliser des composants autres que les natifs...
cs_shining Messages postés 304 Date d'inscription lundi 30 décembre 2002 Statut Membre Dernière intervention 10 mars 2012
29 juin 2006 à 21:19
Salut,
j'ai pas testé mais je tiens à signaler qu'il existe un composant avec Algo BZip2 donc plus performant que la zlib

prends celui-là
"BZip2 Compression Component v.1.0"
http://www.torry.net/quicksearchd.php?String=bzip2&Title=Yes
@+
Utilisateur anonyme
29 juin 2006 à 19:59
Salut,

j'ai essayé et :

le fichier de sortie est plus gros que le même compressé avec WinRar (en Zip)

Impossible d'ouvrir l'archive avec WinZip où WinRar
Et impossible d'ouvrir une archive faite avec WinZip où WinRar

donc dans l'état la source ne sert à rien (où pas grand chose)

@+
Cirec
cs_hafou Messages postés 29 Date d'inscription jeudi 8 janvier 2004 Statut Membre Dernière intervention 8 décembre 2016
29 juin 2006 à 19:52
Je viens de l'essayer il est facile et bien.une remarque: le fichier compressé par exemple est donné sans icone.Pourquoi?
Rejoignez-nous