![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
как сжать поток
iskatel © (2005-07-26 22:26:00)как сжать поток например LZW только чтоб на выходе тоже поток получился, а не зип файл, все это для передачи по сети, т.е. сжимать надо маленькие пакеты, и совсем не нужно чтобы в результат добавлялся зип заголовок
Ученик (2005-07-26 22:40:00) [1]>iskatel © (26.07.05 22:36) [3]
>лишнего ничего не добавится, про билдер не знаю
procedure DecompressStream(Source: TStream; Dest: TStream = nil);
var
DataSize: Integer;
MemoryStream: TMemoryStream;
D: TDecompressionStream;
begin
MemoryStream := TMemoryStream.Create;
try
Source.Read(DataSize, SizeOf(DataSize));
D := TDecompressionStream.Create(Source);
with D do try
MemoryStream.CopyFrom(D, DataSize)
finally
D.Free
end;
if Dest = nil then begin
Source.Size := 0;
Dest := Source
end;
Dest.CopyFrom(MemoryStream, 0)
finally
MemoryStream.Free
end
end;
iskatel (2005-07-26 22:36:00) [2]2 вопроса
1 никаких заголовков и вообще ничего лишнего не добавится? распаковывается в обратной последовательности?
2 у меня билдер 6 и нету там zlib, где ее взять?
Ученик (2005-07-26 22:33:00) [3]Ненужное удалить
uses
ZLib;
procedure CompressStream(Source: TStream; Dest: TStream = nil; aLevel: TCompressionLevel = clFastest);
var
DataSize: Integer;
MemoryStream: TMemoryStream;
begin
MemoryStream := TMemoryStream.Create;
try
DataSize := Source.Size;
MemoryStream.Write(DataSize, SizeOf(DataSize));
with TCompressionStream.Create(aLevel, MemoryStream) do try
CopyFrom(Source, 0)
finally
Free
end;
if Dest = nil then begin
Source.Size := 0;
Dest := Source
end;
Dest.CopyFrom(MemoryStream, 0)
finally
MemoryStream.Free
end
end;
Джо (2005-07-26 22:32:00) [4]Используй библиотеку
ZLib, входящую в поставку Делфи. Там классы-наследникиTCustomZlibStreamявляются потомками TStream. Класс находится в ZLib.dcu, сам pas-файл: в каталоге Extras стандартной поставки Delphi.