![]() |
![]() |
![]() |
|
![]() |
|
15 Fév 2010
Windows Seven : Les premières conclusions
06 Fév 2010
Une semaine d'actu : retour sur l'actualité de la semaine
28 Déc 2009
2000-2010 : Les révolutions qui ont changé le monde
31 Oct 2009
Google Maps Navigation : nouvelle bombe atomique parmi les GPS
24 Juil 2009
HADOPI 2 : Ce qu'on en pense à l'étranger
Google : le maître des noms de domaines
La nouvelle version de GMail en images !
Barème de rémunération pour les disques durs multimédias
TRichEdit : scroll par la molette de la souris
Récupérateur de mots de passe WLM
+6 visiteurs en ligne
Vous êtes ici : Accueil › Delphi › Sources › EXSTREAM, une unité qui simplifie la création et la lecture de flux (fichiers,...)
Auteur : Flo
Catégorie : Manipulation de fichiers
Niveau : Intermédiaire
Déposé le : 21 Novembre 2007 à 16h09
Voici une unité contenant de nouvelles classes pour manipuler les flux.
Alors, au menu :
-TExStream, qui est un "wrapper" de TStream, permet d'ajouter pas mal de fonctions praatiques pour lire et écrire des Byte, Char, Word, Integer, Int64 et chaines. Ecrire et lire un chaine de caractères en une ligne, voila de quoi réconforter certains ! A noter aussi la présence qu'une propriété EOF (End Of File) qui évite le test FStream.Position = FStream.Size.
- TEndianExStream, (descendante deTExStream) qui permet de lire facilement des flux au format BigEndian et LowEndian, sans se préocuper de l'ordres des octets dans les mots. Pratique pour lire des formats comme Tiff qui font la distinction sans se compliquer la vie.
- TBitStream est une classe à part (descend de TObject) qui permet de lire un flux bit par bit. Les trois méthodes sont enfantines et évitent de devoir jongler entre shl, shr, lecture du flux dans un buffer et toutes les joies (!) de la lecture bit-à -bit.
- StrToBits() et BitsToStr(), deux fonctions permettant de convertir une chaine de zéro et de un en Word (et reciproquement)
- SwapBytes(), qui permet d'inverser les octets d'un buffer quelconque (passe de Big à LowEndian et réciproquement)
Bref, vous avez de quoi bien vous amusez avec les flux.
1 23 45 67 89 1011 1213 1415 1617 1819 2021 2223 2425 2627 2829 3031 3233 3435 3637 | { Un exemple concret est illustré dans le zip. Voici cependant les principales fonctions } {Pour créér le flux }S := TExStream.Create(TFileStream.Create(FileName, fmCreate)); { ou alors }S := TExStream.Create(TMemoryStream.Create)); {Ou en transmettant n'importe quel instance de TStream comme premier paramètre ... } { Pour écrire dans le flux } S.WriteInt(42);S.WriteString(MyStr); S.WriteWord(MonWord);{ ou, banalement } S.WriteBuffer(MonRecord, SizeOf(MonRecord)); { Pour lire dans le flux }I := S.ReadInt; Str := S.ReadString;MonWord := S.ReadWord; S.ReadBuffer(MonRecord, SizeOf(MonRecord)); { Pour TEndianStream, c'est la même chose, il suffit de renseigner la propriété Endian (emBig ou emLittle) et le tour est joué. Le constructeur demande d'ailleurs à quel état l'initialiser } { Utilisation de BitStream: création }S := TBitStream.Create(Stream, fmCreate); { Écrit les 6 premiers bits de W dans le flux } S.WriteBits(W, 6); { Lit les 6 premiers bits du flux et les place dans W }W := S.ReadBits(6); { Une fois l'écriture complètement terminé, ou pour aligner les bits sur un octet, il faut appeler la méthode Flush() } S.Flush;S.Free; |
Mais qu'est ce que c'est cette histoire de BigEndian et LittleEndian.
Pour faire simple, c'est la façon dont sont ordonnés les octets dans les structure de plus d'un octet.
Par exemple, pour écrire mille deux cent soixante-douze en chiffes, on à deux choix :
- Soit on écrit le chiffre le plus significatif en premier (celui des milliers), ce qui donne 1272 (il s'agit du mode BigEndian).
- Soit on écrit le chiffre le moins significatif en premier (celui des unités), ce qui donne 2721 (c'est le mode LittleEndian).
Il va de soi que, nous les humains, ayons une forte préférence au premier, plus facile à lire.
Mais les ordinateurs ne sont pas tous d'accord. Windows écrit toujours en LittleEndian par défaut. Si on veut écrire en BigEndian, il faudra inverser tous les octets.
Pour plus d'information : http://fr.wikipedia.org/wiki/Endianess
------------------------------------------
Pourquoi avoir descendu TExStream de TObject et non de TStream ?
Tout simplement car cela permet d'utiliser n'importe quel type de flux.
Attention:
- TExStream.WriteString() écrit la taille de la chaine avant.
- TExStream.WriteChars() ne le fait pas.
Donc pour lire une chaine écrite avec WriteString(), il faut impérativement utiliser ReadString(). Pareil pour l'autre cas (logique).
10 fichiers 16,94 Ko
| Liste de contacts/D‚mo.ldc | 90 Octets |
| Liste de contacts/ExStream.pas | 18,06 Ko |
| Liste de contacts/ListeContacts.dpr | 241 Octets |
| Liste de contacts/UContact.pas | 4,45 Ko |
| Liste de contacts/UFrmPrinc.dfm | 3,80 Ko |
| Liste de contacts/UFrmPrinc.pas | 3,69 Ko |
| Demo du TEndianExStream/DemoTEndianExStream.dpr | 211 Octets |
| Demo du TEndianExStream/ExStream.pas | 18,06 Ko |
| Demo du TEndianExStream/UFrmDemo.dfm | 6,86 Ko |
| Demo du TEndianExStream/UFrmDemo.pas | 5,83 Ko |
Alignement de séquences d'ADN
Notification des modifications des fichiers d'un dossier
Comment faire fonctionner mx-dev
Soyez le premier à commenter cette ressource !
Ajoutez votre commentaire & avis sur la ressource :
Vous n'êtes pas connecté !
Rejoignez dès maintenant la communauté en 3 clics et exprimez votre avis !
J'ai déjà un compte