Форум: "Основная";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
ВнизРаспаковка ZDecompressStream Найти похожие ветки
← →
Chaser © (2007-09-28 16:19) [0]Привет всем!
Вопрос по упаковке/распаковке Zlib (нужно по сети передать StringList).
Пакую так:
var
Str: TStringList;
Memstr,CompressStream: TMemoryStream;
begin
...
Str.SaveToStream(Memstr);
ZCompressStream(Memstr,CompressStream,zcDefault);
CompressStream.Position:=0;
AThread.Connection.OpenWriteBuffer;
AThread.Connection.WriteInteger(CompressStream.Size);
AThread.Connection.WriteStream(CompressStream);
AThread.Connection.CloseWriteBuffer;
...
end;
Распаковка:
ms.Clear;
n:=Form1.IdTCPClient.ReadInteger(true);
Form1.IdTCPClient.ReadStream(ms,n);
ZDecompressStream(ms,msd);
Str.LoadFromStream(msd);
...
В итоге "msd" почему-то равняется 0, хотя "ms" равен какому-то числу (т.е. данные есть).
Вот не пойму, почему не распаковывается поток?
← →
Сергей М. © (2007-09-28 16:50) [1]
> "msd" почему-то равняется 0
Объект не может быть ранен ни нулю, ни "какому-то числу".
← →
Chaser © (2007-09-28 17:00) [2]msd.size конечно же.
← →
Chaser © (2007-09-28 17:01) [3]Из-за чего так может быть?
← →
Сергей М. © (2007-09-28 17:04) [4]Ну наверно из-за того что на передающей стороне CompressStream.Size = 0
← →
Сергей М. © (2007-09-28 17:08) [5]И, кстати, нет нужды явно вызывать методы WriteInteger, ReadInteger.
Посмотри внимательно на параметры методов WriteStream, ReadStream - при определенных значениях эти методы способны делать то же самое (т.е. писать/читать префикс размера потока), но неявно.
← →
Chaser © (2007-09-28 17:28) [6]Всем спасибо, как всегда ошибка закралась в невнимательности (((
Str.SaveToStream(Memstr);
Memstr.Position:=0; <- забыл дописать
ZCompressStream(Memstr,CompressStream,zcDefault);
Вопрос закрыт.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2007.12.16;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.043 c