2012-01-25 19 views
6
SPDY protokolü verilerinin önceden tanımlanmış blokla ad/değer verilerinin sıkıştırılmasını başlatmak için belirtir

: TCompressionStream verilerle başlatmak

http://mbelshe.github.com/SPDY-Specification/draft-mbelshe-spdy-00.xml#rfc.section.2.6.9.1

(yön zlib sıkıştırma işleri

onun için daha az bit kullanacak olmasıdır Daha fazla yeniden ortaya çıkmak için 'görünen' karakter dizeleri, böylece her zamanki şüpheli ile sıkıştırmayı önceden yüklerseniz, daha fazla sıkıştırmadan sonra daha az bit ile sonuçlanırsınız.Ancak şimdi benim gerçek soru için :)

Bu, ZLib ünitesinden Delphi'nin TCompressionStream ile mümkün mü?

cevap

6

deflateSetDictionary ürününü kullanmanız gerekir. Delphi XE2'nin ZLib.pas sürümünde kullanılabilir, ancak sıkıştırma akışı sınıfları, onu çağırmak için TZStreamRec alanını göstermez. Sınıf yardımcıları ilişkili sınıfın özel alanlarına erişebilir, bu nedenle TCustomZStream'a bir tane ekleyerek bu sınırlama etrafında çalışabilirsiniz (TZCompressionStream'a eklenmez).

type 
    TCustomZStreamHelper = class helper for TCustomZStream 
    function SetDictionary(dictionary: PByte; dictLength: Cardinal): Integer; 
    end; 

function TCustomZStreamHelper.SetDictionary(dictionary: PByte; 
    dictLength: Cardinal): Integer; 
begin 
    if Self is TZCompressionStream then 
    Result := deflateSetDictionary(Self.FZStream, dictionary, dictLength) 
    else if Self is TZDecompressionStream then 
    Result := inflateSetDictionary(Self.FZStream, dictionary, dictLength) 
    else raise Exception.Create('Invalid class type'); 
end; 

Sadece sıkıştırma akışını oluşturduktan hemen sonra SetDictionary'ı SPDY dizesi ile çağırın.

İlgili konular