Каковы основные методы чтения / записи для потоков в Delphi XE3
У меня есть некоторые производные классы Stream для более старых версий RADStudio, которые просто переопределяют методы Read,Write,Seek и свойства Size и Position.
Я пытаюсь перенести их на XE3, но вижу, что сейчас (например) есть три перегрузки для Read
- исходный плюс два, которые принимают TBytes в качестве параметров.
Delphi
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;
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 */;
Нужно ли реализовывать все три или только один? А если только один, какой...?
Обычно я мог бы найти это из источника VCL, но я только что получил пробную версию (без источника) в настоящее время.
2 ответа
Вам нужно только реализовать метод чтения и записи с этими подписями
function Read(var Buffer; Count: Longint): Longint; overload; virtual;
function Write(const Buffer; Count: Longint): Longint
потому что версии перегрузок, которые используют TBytes
(а также System::DynamicArray<System::Byte>
) в качестве параметра внутренне вызывает вышеуказанные версии Read и Write.
Минимум виртуальный 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;
Если вы хотите поддержать присвоение Size
свойство, которое нужно переопределить:
procedure SetSize(NewSize: Longint); overload; virtual;
procedure SetSize(const NewSize: Int64); overload; virtual;
Реализация 32 бит SetSize
должен вызвать 64 бит SetSize
, И 64 бит SetSize
делает работу
Если вы не переопределите эти методы, тогда присваивание потоку Size
собственность молча ничего не сделает.