System.Classes.TStream.Size

De RAD Studio API Documentation
Aller à : navigation, rechercher

Delphi

property Size: Int64 read GetSize write SetSize64;

C++

__property __int64 Size = {read=GetSize, write=SetSize64};

Propriétés

Type Visibilité  Source Unité  Parent
property public
System.Classes.pas
System.Classes.hpp
System.Classes TStream

Description

Indique la taille du flux, exprimée en octets.

Utilisez la propriété Size pour trouver la taille du flux. Size est utilisée en interne dans les routines qui lisent et écrivent dans le flux. La définition de la propriété Size de TStream ne fait rien. Cependant, les descendants de TStream peuvent redéfinir cette propriété pour permettre aux applications de changer la taille de la ressource dont l'accès s'effectue via le flux.

La propriété Size indique la taille du flux en octets. Cependant, un descendant de TStream peut utiliser -1 pour indiquer une taille inconnue. Si la taille est inconnue, utilisez la valeur de retour à partir de TStream.Read pour déterminer la fin du flux.

Exemple de taille de flux en utilisant DataSnap et DBX

Quand vous lisez un flux DataSnap en blocs, le descendant de TStream réel utilisé pour lire le flux est TDBXStreamReaderStream. TDBXStreamReaderStream redéfinit les méthodes de TStream, telles que la méthode System.Classes.TStream.GetSize, qui est le lecteur de la propriété Size.

Les connexions à DBX supportent la lecture des flux en bloc. La taille par défaut du bloc est 32 Ko. Les flux peuvent être transmis depuis le client vers le serveur, ou bien depuis le serveur vers le client. Quand le destinataire lit le flux (quoique le destinataire soit le client ou le serveur), le flux est transmis en blocs depuis l'expéditeur vers le destinataire. Quand le flux est assez grand pour nécessiter des lectures des blocs multiples, la propriété Size du flux du destinataire est -1, ce qui indique que la taille du flux est inconnue. Pendant que le destinataire lit le flux, DataSnap émet une requête au serveur pour le bloc suivant, selon le besoin. Pour lire le flux, le client appelle la méthode Read() jusqu'à ce que la valeur de retour soit inférieure à la valeur requise.

Le code suivant montre comment lire un flux jusqu'à la fin, en vérifiant la valeur de retour à partir de Read() :

 var
   LBuffer: TArray<Byte>;
   LReadCount: Integer;
 begin
   SetLength(LBuffer, 1024*10); // 10K buffer for this example.  The buffer size can be larger or smaller.
   repeat
     LReadCount := AStream.Read(LBuffer[0], Length(LBuffer));
     if LReadCount > 0 then
     begin
       // Process buffer
     end;
   until LReadCount < Length(LBuffer);

Voir aussi

Exemples de code