Dieses bezieht sich auf folgenden Beitrag:
Code-Library => Library: Object-Pascal / Delphi-Language =>
String komprimieren dekomprimieren (von SleepyMaster)
Ich wollte nur mal vorschlagen, dass es "sinnlos" ist, wenn zuerst der Input-String in einen extra Buffer kopiert wird.
Es geht ja auch ohne
(erspart rund 33%
RAM und ein kleinwenig Rechenzeit)
Delphi-Quellcode:
Uses ZLib;
Function CompressString(Input:
String):
String;
Var Buffer: Pointer;
BufSize: Integer;
Begin
Buffer :=
nil;
Try
CompressBuf(Input[1], Length(Input), Buffer, BufSize);
SetLength(Result, BufSize);
Move(Buffer^, Result[1], BufSize);
Finally
If Buffer <>
nil Then FreeMem(Buffer);
End;
End;
Function DeCompressString(Input:
String):
String;
Var Buffer: Pointer;
BufSize: Integer;
Begin
Buffer :=
nil;
Try
DeCompressBuf(Input[1], Length(Input), 0, Buffer, BufSize);
SetLength(Result, BufSize);
Move(Buffer^, Result[1], BufSize);
Finally
If Buffer <>
nil Then FreeMem(Buffer);
End;
End;
Und wer möchte kann auch noch statt
Delphi-Quellcode:
SetLength(Result, BufSize);
Move(Buffer^, Result[1], BufSize);
dieses verwenden
SetString(Result, Buffer, BufSize);