Вам необходимо использовать deflateSetDictionary . Он доступен в Delphi XE2 ZLib.pas , но классы потоков сжатия не предоставляют поле TZStreamRec
для его вызова. Помощники класса могут получить доступ к закрытым полям связанного класса, поэтому вы можете обойти это ограничение, добавив его к TCustomZStream
(добавление его к TZCompressionStream
не будет работать).
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;
Просто вызовите SetDictionary со строкой SPDY сразу после создания потока сжатия.