System.Classes.TStream.Size

提供: RAD Studio API Documentation
移動先: 案内検索

Delphi

property Size: Int64 read GetSize write SetSize64;

C++

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

プロパティ

種類 可視性 ソース ユニット
property public
System.Classes.pas
System.Classes.hpp
System.Classes TStream

説明

ストリームのサイズをバイト数で示します。


Size を使用して、ストリームのサイズを知ることができます。Size は、ストリームに対して読み書きを行うルーチンで内部的に使われます。TStreamSize プロパティを設定しても何も起きません。ただし、TStream の下位クラスでこのプロパティをオーバーライドして、ストリームを使ってアクセスするリソースのサイズをアプリケーションで変更できるようにすることは可能です。

通常、Size プロパティはストリームのサイズをバイト数で示します。ただし、TStream の下位クラスでは、サイズが不明であることを -1 を使って示すことができます。サイズが不明な場合には、TStream.Read の戻り値を使ってストリームの終わりを判断してください。

DataSnap および DBX を使用する場合のストリーム サイズの例

DataSnap ストリームをブロック単位で読み取っている場合、実際にストリームの読み取りに使われる TStream の下位クラスは TDBXStreamReaderStream です。TDBXStreamReaderStream では、System.Classes.TStream.GetSize メソッド(Size プロパティのリーダー)などの TStream のメソッドをオーバーライドしています。

DBX 接続ではブロック単位でのストリームの読み取りをサポートしています。デフォルトのブロック サイズは 32 KB です。ストリームは、クライアントからサーバーへ、あるいはサーバーからクライアントへと渡すことができます。受信側(クライアントであるかサーバーであるかを問いません)がストリームを読み取るときには、ストリームは送信側から受信側へブロック単位で渡されます。複数のブロックに分けて読み取る必要があるほどストリームのサイズが大きい場合、受信側のストリームの Size プロパティは -1 になり、ストリームのサイズが不明であることを示します。受信側がストリームを読み取ると、DataSnap は必要に応じて送信側に次のブロックを要求します。ストリームを読み取るには、クライアントで、戻り値が要求した値よりも小さくなるまで Read() メソッドを呼び出します。

以下のコードは、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);

関連項目

コード例