System.Classes.TStream.Size

Aus RAD Studio API Documentation
Wechseln zu: Navigation, Suche

Delphi

property Size: Int64 read GetSize write SetSize64;

C++

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

Eigenschaften

Typ Sichtbarkeit Quelle Unit Übergeordnet
property public
System.Classes.pas
System.Classes.hpp
System.Classes TStream


Beschreibung

Gibt die Größe des Streams in Bytes an.

Mit Size können Sie die Größe des Streams ermitteln. Size wird intern in Routinen verwendet, die aus dem Stream lesen und in ihn schreiben. Wenn der Eigenschaft Size von TStream ein Wert zugewiesen wird, hat dies keinen Effekt. Trotzdem überschreiben einige von TStream abgeleitete Klassen diese Eigenschaft, damit in Anwendungen die Größe der Ressource, auf die mit dem Stream zugegriffen wird, geändert werden kann.

Die Eigenschaft Size gibt normalerweise die Größe des Streams in Bytes an. Ein Nachkommen von TStream kann aber -1 verwenden, um eine unbekannte Größe anzuzeigen. Wenn die Größe unbekannt ist, verwenden Sie den Rückgabewert von TStream.Read, um das Ende des Streams zu ermitteln.

Beispiel einer Stream-Größe, die DataSnap und DBX verwendet

Wenn Sie einen DataSnap-Stream in Blöcken lesen, ist TDBXStreamReaderStream der aktuelle Nachkommen von TStream, der zum Lesen des Streams verwendet wird. TDBXStreamReaderStream überschreibt Methoden von TStream, wie die Methode System.Classes.TStream.GetSize, die der Reader der Eigenschaft Size ist.

DBX-Verbindungen unterstützen das Lesen von Streams in Blöcken. Die Standard-Blockgröße ist 32K. Streams können von dem Client an den Server oder von dem Server an den Client übergeben werden. Wenn der Empfänger den Stream liest (wenn der Empfänger der Client oder der Server ist), wird der Stream von dem Sender an den Empfänger übergeben. Wenn der Stream groß genug ist, um das wiederholte Lesen von Blöcken zu benötigen, ist die Eigenschaft Size des Streams des Empfängers -1. Dies bedeutet, dass die Größe des Streams unbekannt ist. Während der Empfänger den Stream liest, stellt DataSnap bei Bedarf eine Anforderung für den Sender bezüglich des nächsten Blocks. Zum Lesen des Streams ruft der Client die Methode Read() auf, bis der Rückgabewert kleiner als der angeforderte Wert ist.

Der folgende Code zeigt, wie ein Stream durch Überprüfen des Rückgabewerts von Read() bis zum Ende gelesen werden kann:

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);

Siehe auch

Codebeispiele