Вызов TStream.Read/ReadBuffer также следует рассмотреть, если используются строки или символьные массивы. Рассмотрим следующий код: var S: string; L: Integer; Stream: TStream; Temp: AnsiString; begin // Существующий код - неправильный, потому что string = UnicodeString Stream.Read(L, SizeOf(Integer)); SetLength(S, L); Stream.Read(Pointer(S)^, L); // Правильный код для Юникод-данных Stream.Read(L, SizeOf(Integer)); SetLength(S, L); Stream.Read(Pointer(S)^, L * SizeOf(Char)); // <<-- Задание размера буфера в байтах // Правильный код для ANSI-данных Stream.Read(L, SizeOf(Integer)); SetLength(Temp, L); // <<-- Используем временную AnsiString Stream.Read(Pointer(Temp)^, L * SizeOf(AnsiChar)); // <<-- Задание размера буфера в байтах S := Temp; // <<-- Расширим строку до Юникода end;
Примечание: работа зависит от формата читаемых данных. Смотрите описание нового класса TEncoding, приведенное выше, для получения сведений о правильном кодировании текста в Stream"е.