Einzelnen Beitrag anzeigen

Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.184 Beiträge
 
Delphi 12 Athens
 
#12

AW: Komprimiertes Speichern von Virtual Stringtree / Stream

  Alt 14. Aug 2011, 10:43
Im Prinzip könnte man sowas selber Implementieren.

TZCompressionStream ist nach außen ein Stream, welchen man nun an SaveToStream übergeben könnte.
Im Constructor gibt man diesem aber einen anderen Stream mit, wie z.B. einen TFileStream.

Alles was reinkommt, wird komprimiert und an den anderen Stream weitergegeben.




Dieser komprimierte Stream ist aber mit nichts kompatibel, kann also nur mit dem beigelegten TDecompessStream entpackt werden.
Delphi-Quellcode:
program Project2;

{$APPTYPE CONSOLE}

uses SysUtils, SimpleCompressStream;

var
  C: TCompessStream;
  D: TDecompessStream;
  X: AnsiString;
begin
  try
    C := TCompessStream.Create(ChangeFileExt(ParamStr(0), '.dat'));
    try
      X := '123456789';
      C.WriteBuffer(X[1], Length(X));

      X := 'abcdefghij'; // Mehreres in einem Kompressionsteil simulieren
      C.WriteBuffer(X[1], Length(X));

      C.Flush; // einen neuen Kompressionsteil simulieren
      X := 'klmnopqrstubwxyz';
      C.WriteBuffer(X[1], Length(X));
    finally
      C.Free;
    end;

    D := TDecompessStream.Create(ChangeFileExt(ParamStr(0), '.dat'));
    try
      SetLength(X, 9);
      D.ReadBuffer(X[1], Length(X));
      WriteLn(X); // 123456789

      SetLength(X, 10);
      D.ReadBuffer(X[1], Length(X));
      WriteLn(X); // abcdefghij

      SetLength(X, 16);
      D.ReadBuffer(X[1], Length(X));
      WriteLn(X); // klmnopqrstubwxyz
    finally
      D.Free;
    end;

    D := TDecompessStream.Create(ChangeFileExt(ParamStr(0), '.dat'));
    try
      SetLength(X, 35);
      D.ReadBuffer(X[1], Length(X));
      WriteLn(X); // 123456789abcdefghijklmnopqrstubwxyz
    finally
      D.Free;
    end;
    WriteLn('ende...');
    ReadLn;
  except
    on E: Exception do begin
      WriteLn(E.ClassName, ': ', E.Message);
      ReadLn;
    end;
  end;
end.
Angehängte Dateien
Dateityp: pas SimpleCompressStream.pas (4,9 KB, 7x aufgerufen)
$2B or not $2B

Geändert von himitsu (14. Aug 2011 um 10:46 Uhr)
  Mit Zitat antworten Zitat