Главная страница
    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.45 MB
Время: 0.04 c
1-1119918781
Витёк
2005-06-28 04:33
2005.07.18
память


4-1117085498
Logo
2005-05-26 09:31
2005.07.18
нажатие клавиш в DOS приложении


6-1113306725
zorik
2005-04-12 15:52
2005.07.18
cgi-приложение


14-1119966211
Desam
2005-06-28 17:43
2005.07.18
Что бы вы хотели видеть?


1-1119868243
kot andrei
2005-06-27 14:30
2005.07.18
Надо подумать...





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский