Текущий архив: 2005.08.14;
Скачать: CL | DM;
Вниз
как сжать поток Найти похожие ветки
← →
iskatel © (2005-07-26 22:26) [0]как сжать поток например LZW только чтоб на выходе тоже поток получился, а не зип файл, все это для передачи по сети, т.е. сжимать надо маленькие пакеты, и совсем не нужно чтобы в результат добавлялся зип заголовок
← →
Джо © (2005-07-26 22:32) [1]Используй библиотеку
ZLib
, входящую в поставку Делфи. Там классы-наследникиTCustomZlibStream
являются потомками TStream. Класс находится в ZLib.dcu, сам pas-файл: в каталоге Extras стандартной поставки Delphi.
← →
Ученик (2005-07-26 22:33) [2]Ненужное удалить
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;
← →
iskatel © (2005-07-26 22:36) [3]2 вопроса
1 никаких заголовков и вообще ничего лишнего не добавится? распаковывается в обратной последовательности?
2 у меня билдер 6 и нету там zlib, где ее взять?
← →
Ученик (2005-07-26 22:40) [4]>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;
Страницы: 1 вся ветка
Текущий архив: 2005.08.14;
Скачать: CL | DM;
Память: 0.45 MB
Время: 0.011 c