IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Copie d'un flux dans un autre


Sujet :

Langage Delphi

  1. #1
    Membre éclairé

    Homme Profil pro
    Fondateur de ZetaPush - realtime BaaS
    Inscrit en
    Mars 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fondateur de ZetaPush - realtime BaaS
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 146
    Points : 687
    Points
    687
    Par défaut Copie d'un flux dans un autre
    Bonjour,

    Dans mes copies de flux mémoire les uns dans les autres, j'utilise actuellement un buffer intermédiaire. Il me semble que ce n'est pas le moyen le plus efficace.
    J'ai essayé d'utiliser le pointeur memory mais ça ne fonctionne pas.

    Quelqu'un a-t-il une idée?

    Merci d'avance
    Mikaël Morvan
    ZetaPush: realtime BaaS www.zetapush.com

  2. #2
    Membre chevronné
    Avatar de Bidouille
    Inscrit en
    Mars 2003
    Messages
    1 273
    Détails du profil
    Informations forums :
    Inscription : Mars 2003
    Messages : 1 273
    Points : 1 990
    Points
    1 990
    Par défaut
    Peux tu préciser à quoi te servent ces flux ?
    Rédacteur PHP / Delphi ADO / Novell / OpenOffice.org

    Inutile de m'envoyer vos questions par MP, je ne réponds que par le forum.

  3. #3
    Membre éclairé

    Homme Profil pro
    Fondateur de ZetaPush - realtime BaaS
    Inscrit en
    Mars 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fondateur de ZetaPush - realtime BaaS
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 146
    Points : 687
    Points
    687
    Par défaut
    J'utilise les flux pour enregistrer des données binaires, les compresser, les chiffrer,...
    Au moment de la relecture, j'ai besoin d'extraire une partie du flux par exemple pour déchiffrer une partie qui est en XML. Pour l'extraction, j'utilise un buffer mai je pense qu'on peut directement utiliser la propriété Memory du TMemoryStream.
    ZetaPush: realtime BaaS www.zetapush.com

  4. #4
    Membre expert
    Avatar de Bestiol
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    1 515
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 515
    Points : 3 894
    Points
    3 894
    Par défaut
    Si tu utilise un Stream (dérivant de la classe TStream), tu peux utiliser la méthode

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CopyFrom(Source: TStream; Count: Integer);
    Si tu passes 0 en paramètre à count, le Stream "Source" est copié dans sa totalité dans le Stream avec lequel tu appelles la méthode. Si tu mets un chiffre différent de 0, la méthode copie Count octets à partir de la position actuelle de "Source"...

    J'espère que ça répond à ta question !

    @+
    Bestiol.
    Mea est trop forte, elle flotte : mea coule pas !

    Basically this boot sector (Win95) code is 32 bit extension for a 16 bit patch to an 8 bit boot sector originally coded for a 4 bit microprocessor, written by a 2 bit company, that can't stand 1 bit of competition.

    olance.developpez.com
    Servez-vous, profitez, abusez de la FAQ Delphi !!

  5. #5
    Membre chevronné
    Avatar de Pierre Castelain
    Inscrit en
    Avril 2002
    Messages
    523
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 523
    Points : 1 943
    Points
    1 943
    Par défaut
    Tu peux effectivement accéder directement à la zone mémoire d'un TMemoryStream en manipulant des pointeurs. Voici un exemple illustrant ce type d'accès. Mais franchement, à moins que tes streams ne soient énormes et que tes besoins de performances ne soient importants, je te conseille de copier tes données dans des streams ou buffers temporaires. C'est beaucoup plus facile à débugger.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      memStream: TMemoryStream;
      i: Integer;
      buffer: PByteArray;
      value: byte;
    begin
      memStream:= TMemoryStream.Create;
      try
        // Remplissage avec 3 valeurs
        value:= 10;
        memStream.Write(value, SizeOf(value));
        value:= 20;
        memStream.Write(value, SizeOf(value));
        value:= 30;
        memStream.Write(value, SizeOf(value));
     
        // Buffer pointe vers la zone mémoire du stream
        buffer:= memStream.Memory;
     
        // Affichage des bytes consécutifs stockés à partir de l'adresse
        // pointée par buffer (et memStream.Position évidemment)
        for i:= 0 to 2 do
          memo1.Lines.Add(IntToStr(buffer[i]));
      finally
        memStream.Free;
      end;
    end;

  6. #6
    Membre éclairé

    Homme Profil pro
    Fondateur de ZetaPush - realtime BaaS
    Inscrit en
    Mars 2002
    Messages
    146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Fondateur de ZetaPush - realtime BaaS
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 146
    Points : 687
    Points
    687
    Par défaut
    CopyFrom, c'est ça que je cherchais. En plus, j'ai retrouvé un bout de code que j'avais fait il y a quelques temps et qui l'utilisait

    Pour l'accès directe, je ne pense pas en avoir besoin.

    Merci encore,
    Mikaël Morvan
    ZetaPush: realtime BaaS www.zetapush.com

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Copie d'une base dans une autre base
    Par DARIO dans le forum Access
    Réponses: 1
    Dernier message: 18/09/2007, 09h20
  2. Copie de données filtrées dans une autre feuille
    Par papagei2 dans le forum Excel
    Réponses: 1
    Dernier message: 30/08/2007, 17h16
  3. copie d'un flux dans response
    Par so007 dans le forum Struts 1
    Réponses: 2
    Dernier message: 15/09/2006, 09h56
  4. [VBA Excel] Copie d'une feuille dans un autre fichier
    Par nattyman dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/08/2006, 11h35
  5. [Oracle XE] Copie d'un schéma dans un autre
    Par rozwel dans le forum Oracle
    Réponses: 8
    Dernier message: 19/12/2005, 20h20

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo