System.Classes.TStream.Size
Delphi
property Size: Int64 read GetSize write SetSize64;
C++
__property __int64 Size = {read=GetSize, write=SetSize64};
Inhaltsverzeichnis
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);