Думайте о потоке памяти как о расположенном в памяти файле. Команды для работы с потоком очень похожи на команды для работы с файлами. (В действительности, это ближе к команде blockwrite.)
Вот "медленный" путь записи строки в поток:
for i := 1 to Length(s) do
memstream.Write(s[i], 1);
Данный код пишет за один проход один символ строки. Просто и легко для понимания, но немного медленно в работе. Для ускорения процесса можно сделать так:
memstream.Write(s[1], Length(s));
Две строчки делают то же самое, они добавляют символы в поток. Если вы не делали никаких перемещений внутреннего курсора потока (seek), символы просто добавляются в конец.
Теперь, для соблюдения перевода каретки, вы должны добавлять эти спецсимволы сами:
memstream.Write(#13, 1);
memstream.Write(#10, 1);
Или вы можете использовать более изощренный метод:
procedure StreamWriteStr(var ms: TMemoryStream; s: string);
begin
ms.Write(s[1], Length(s));
end;
procedure StreamWriteLnStr(var ms: TMemoryStream; s: string);
begin
StreamWriteStr(ms, s + #13#10);
end;
Также, вы можете создать собственный класс-потомок TMemoryStream, с методом записи строк.
Опубликовал Kest
November 13 2008 12:24:57 ·
0 Комментариев ·
24841 Прочтений ·
• Не нашли ответ на свой вопрос? Тогда задайте вопрос в комментариях или на форуме! •
Комментарии
Нет комментариев.
Добавить комментарий
Рейтинги
Рейтинг доступен только для пользователей.
Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.
Нет данных для оценки.
Гость
Вы не зарегистрированны? Нажмите здесь для регистрации.