Каковы основные методы чтения / записи для потоков в 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 собственность молча ничего не сделает.

Другие вопросы по тегам