Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Komprimiertes Speichern von Virtual Stringtree / Stream (https://www.delphipraxis.net/162221-komprimiertes-speichern-von-virtual-stringtree-stream.html)

friedemann2009 14. Aug 2011 08:20

AW: Komprimiertes Speichern von Virtual Stringtree / Stream
 
Zitat:

Zitat von himitsu (Beitrag 1116724)
Welche Delphiversion nutzt du eigentlich?
Es gibt da auch Delphi-Referenz durchsuchenTZCompressionStream und Delphi-Referenz durchsuchenTZDecompressionStream in der unit ZLib, diese Stream hängst du direkt an den TFileStream und übergibst sie der Speicherroutine, damit wird direkt komprimiert und gleich abgespeichert ... spart enorm viel an Arbeitsspeicher.

Hm, das hörte sich doch interessant an, zumal es vlt. doch die Performance erhöhen könnte. Nur, was meinst Du mit "an den TFileStream dranhängen"?

Gruß, frieder

EDIT: Ok, hat sich wohl erledigt; TCompressionStream gibt es lt. Forum erst ab D7...

himitsu 14. Aug 2011 09:43

AW: Komprimiertes Speichern von Virtual Stringtree / Stream
 
Liste der Anhänge anzeigen (Anzahl: 1)
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.

FredlFesl 14. Aug 2011 09:54

AW: Komprimiertes Speichern von Virtual Stringtree / Stream
 
1GB-Daten in einem VST? :shock: Wer schaut sich sowas denn an?


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:47 Uhr.
Seite 2 von 2     12   

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz