Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Формат GZip где я не прав?   Найти похожие ветки 

 
Slym ©   (2005-04-13 10:21) [0]

1 При распаковке (RAR) жалуется на неверный CRC, но исправно распаковывает!!!
2 IExplorer не читает этот файл если при Accept-Encoding: gzip
но Reget его исправно выкачивает (также в gzip)(ему наверно чихать на CRC)
CRC32 исходно файла расчитывается правильно, может я не туда ложу его в архиве?
по стандарту:
заголовок 10байт (я использую только основной заголовок) ->
поток deflate->
crc32 4байта ->размер распакованный 4байта.

сравнивал два архива одного файла зажатый моим модулем и сжатый GZipом... конец (8 байт) одинаковый. GZip распаковывает нормально, на мой жалуется на CRC (RAR)
мой модуль:
unit GZip;

interface
uses classes,zlib,crc32;

procedure CompressStream(Source,Dest:TStream);
procedure CompressStreamInplace(Source:TStream);

implementation
type
 TGZipHeader=packed record
   ID1:byte;
   ID2:byte;
   CM:byte;
   FLG:byte;
   MTIME:integer;
   XFL:byte;
   OS:byte;
 end;
 TGZipEnd=packed record
   Crc32:integer;
   Size:integer;
 end;
const DefGZipHeader:TGZipHeader=(ID1:31;ID2:139;CM:8;FLG:0;MTIME:0;XFL:2;OS:255);

procedure CompressStream(Source,Dest:TStream);
var
 MemoryStream:TMemoryStream;
 CompressionStream:TCompressionStream;
 GZipEnd:TGZipEnd;
begin
 GZipEnd.Crc32:=Crc32Stream(Source,0);
 GZipEnd.Size:=Source.Size;
 Dest.WriteBuffer(DefGZipHeader,SizeOf(DefGZipHeader));
 MemoryStream:=TMemoryStream.Create;
 try
   CompressionStream:=TCompressionStream.Create(clMax,MemoryStream);
   try
     CompressionStream.CopyFrom(Source,0);
   finally
     CompressionStream.Free;
   end;
   MemoryStream.Seek(2,soBeginning);//Skip first 2 bytes!
   Dest.CopyFrom(MemoryStream,MemoryStream.Size-2);
 finally
   MemoryStream.Free;
 end;
 Dest.WriteBuffer(GZipEnd,SizeOf(GZipEnd));
end;

procedure CompressStreamInplace(Source:TStream);
var Dest:TMemoryStream;
begin
 Dest:=TMemoryStream.Create;
 try
   CompressStream(Source,Dest);
   Source.Size:=0;
   Source.CopyFrom(Dest,0);
 finally
   Dest.Free;
 end;
end;

end.


 
Slym ©   (2005-04-15 04:52) [1]

Хм... Третьи сутки пошли... Такой простой формат GZip, а помочь никто не хочет... Весь rfc1952 прочитал (может у меня с аглицким плохо), все по нему: не работает!


 
Slym ©   (2005-04-15 04:55) [2]

Что я делаю:
Серверок на IDHttpServer (Indy10)... с возможностью сжимать контент:
Deflate сжатие работает!, но GZip более широко поддерживается (опираюсь на возможности имеющегося совта) и нужен именно GZip!



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.053 c
14-1119638837
NightStranger
2005-06-24 22:47
2005.07.18
Оцените дизайн сайта


1-1119878055
Begin
2005-06-27 17:14
2005.07.18
Список полей класса. Можно как то получить в runtime?


8-1111501721
neiromantik
2005-03-22 17:28
2005.07.18
Stream Read Error


4-1116951848
Lamer8
2005-05-24 20:24
2005.07.18
SHFileOperation


11-1103024613
Роман
2004-12-14 14:43
2005.07.18
Active X