ZLib - Stream komprimieren

Antworten
_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

ZLib - Stream komprimieren

Beitrag von _X_ »

Wie kann ich mit der ZLib einen Buffer komprimieren?

Das ist von Aison, hat er mir im IRC geschickt. Ist für Strings.

Code: Alles auswählen

function CompressString(const S: String; const Level: Integer): String;
var
  Len: uLong;
  res: cint;
begin
  if Length(S) > 0 then
  begin
    Len := compressBound(Length(S));
    SetLength(Result, Len+4);
    res := compress2(@Result[5], @Len, @S[1], Length(S), Level);
    if res <> Z_OK then
      raise Exception.Create(zError(res));
    SetLength(Result, Len+4);
    PLongword(@Result[1])^ := Len;
  end else
    Result := '';
end;
 
function DecompressString(const S: String): String;
var
  Len: uLong;
  res: cint;
begin
  if Length(S) > 4 then
  begin
    Len := PLongword(@S[1])^;
    SetLength(Result, Len);
    res := uncompress(@Result[1], @Len, @S[5], Length(S)-4);
    if res <> Z_OK then
      raise Exception.Create(zError(res));
  end else
    Result := '';
end;
Manchmal geht das manchmal auch nicht. Meistens kommt ein "Buffer error".
Wenn ich das Wegbringen würde, bräuchte ich keinen Funktionen zum komprimieren und dekomprimieren von Buffern mehr.

Der "Buffer error" hat nichts mit meiner Frage, wie ich mit der ZLib Buffer komprimieren kann, zu tun.

mfg _X_

edit:// Titel geändert
Zuletzt geändert von _X_ am Fr 15. Mai 2009, 21:47, insgesamt 1-mal geändert.

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: ZLib - Buffer komprimieren

Beitrag von _X_ »

Hat keiner eine Ahnung?

mfg _X_

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: ZLib - Buffer komprimieren

Beitrag von theo »

Ich versteh die Frage nicht.
Ein String IST doch ein Buffer.

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: ZLib - Buffer komprimieren

Beitrag von _X_ »

Sorry, als ich die Frage gestellt habe, hatte ich ziemlichen Stress.
Ich meinte Streams. Habe den Titel korrigiert.

mfg _X_

Hitman
Beiträge: 512
Registriert: Mo 25. Aug 2008, 18:17
OS, Lazarus, FPC: ArchLinux x86, WinVista x86-64, Lazarus 0.9.29, FPC 2.4.1
CPU-Target: x86
Wohnort: Chemnitz

Re: ZLib - Stream komprimieren

Beitrag von Hitman »

Da würde ich einen TCompressionStream empfehlen ;-) uses zstreams

_X_
Beiträge: 250
Registriert: Di 16. Dez 2008, 20:13
OS, Lazarus, FPC: aptosid (aptosid.com); Lazarus SVN gtk2+qt4; FPC 2.4.0
CPU-Target: 32/64Bit

Re: ZLib - Stream komprimieren

Beitrag von _X_ »

Gut.
TCompressionStream.Create([...], ASkipheader: boolean);
Heißt das, wenn ich das auf False stelle, dass wenn ich den Komprimierten Stream speichere, der Mimtype "application/gzip" oder der Typ von Zip wäre?

Antworten