Delphi XE3中Streams的基础读/写方法是什么?

Rod*_*ddy 4 delphi tstream delphi-xe3

我为旧版RADStudio提供了一些派生类,只需重新实现Read,Write,Seek方法以及Size和Position属性.

我希望将这些移植到XE3,但我看到现在(例如)有三个重载Read- 原始的一个,加上两个以TBytes作为参数.

德尔福

function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Read(Buffer: TBytes; Offset, Count: Longint): Longint; overload; virtual;
function Read(var Buffer: TBytes; Count: Longint): Longint; overload;
Run Code Online (Sandbox Code Playgroud)

C++

virtual int __fastcall Read(void *Buffer, int Count)/* overload */;
virtual int __fastcall Read(System::DynamicArray<System::Byte> Buffer, int Offset, int Count)/* overload */;
int __fastcall Read(System::DynamicArray<System::Byte> &Buffer, int Count)/* overload */;
Run Code Online (Sandbox Code Playgroud)

我需要实现这三个,还是只需一个?如果只有一个,哪一个......?

通常情况下,我可以从VCL源代码中找到它,但我目前只有试用版(无源代码).

RRU*_*RUZ 6

您只需要使用这些签名实现读写方法

function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Write(const Buffer; Count: Longint): Longint
Run Code Online (Sandbox Code Playgroud)

因为使用TBytes(和System::DynamicArray<System::Byte>)作为参数的重载版本在内部调用上述版本的Read和Write.


Dav*_*nan 6

TStream您需要覆盖的最小虚拟方法是:

function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Write(const Buffer; Count: Longint): Longint; overload; virtual;
function Seek(const Offset: Int64; Origin: TSeekOrigin): Int64; overload; virtual;
Run Code Online (Sandbox Code Playgroud)

如果要支持分配Size属性,则需要覆盖:

procedure SetSize(NewSize: Longint); overload; virtual;
procedure SetSize(const NewSize: Int64); overload; virtual;
Run Code Online (Sandbox Code Playgroud)

32位的实现SetSize必须调用64位SetSize.并且64位SetSize完成了工作.

如果不重写这些方法,则分配给流的Size属性将默默地执行任何操作.