AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Komprimiertes Speichern von Virtual Stringtree / Stream
Thema durchsuchen
Ansicht
Themen-Optionen

Komprimiertes Speichern von Virtual Stringtree / Stream

Ein Thema von friedemann2009 · begonnen am 13. Aug 2011 · letzter Beitrag vom 14. Aug 2011
 
friedemann2009

Registriert seit: 10. Feb 2010
49 Beiträge
 
#1

Komprimiertes Speichern von Virtual Stringtree / Stream

  Alt 13. Aug 2011, 08:57
Morgen zusammen,

folgendes Problem: Habe eine VST mit SEHR VIELEN Zeilen, die ich via VST.savetostream in einen Filestream speichere. Bei sehr großen Datenmengen wird die gespeicherte Datei allerdings schnell mal 1GB groß = unverhältnismäßig groß für reine Textdaten. Daher habe ich eine bei den Schweizern gefundene Streamkomprimierung eingebaut. Letztere übergibt den komprimierten Stream allerdings an TMemorystream; folglich habe ich VST.savetostream zunächst an TMemorystream übergeben, um es dann zu komprimieren und dann zu speichern (via Umleitung in TFilestream). Leider scheint das speichern der VST-Daten in TMemorystream unendlich viel langsamer zu sein bzw. kommt nie zum Ende; hat jemand eine Ahnung warum bzw. wie ich das umgehen könnte (außer zuerst unkomprimiert in TFilestream zu speichern, dann wieder zu laden, zu komprimieren und wieder zu speichern..)?

Das ist der relevante Code:

Delphi-Quellcode:
uses ZLib;

procedure CompressStream(inpStream, outStream: TStream);
var
  InpBuf, OutBuf: Pointer;
  InpBytes, OutBytes: Integer;
begin
  InpBuf := nil;
  OutBuf := nil;
  try
    GetMem(InpBuf, inpStream.Size);
    inpStream.Position := 0;
    InpBytes := inpStream.Read(InpBuf^, inpStream.Size);
    CompressBuf(InpBuf, InpBytes, OutBuf, OutBytes);
    outStream.Write(OutBuf^, OutBytes);
  finally
    if InpBuf <> nil then FreeMem(InpBuf);
    if OutBuf <> nil then FreeMem(OutBuf);
  end;
end;


procedure TForm1.Button8Click(Sender: TObject);
var
  kompstream: tstream;
  stream: TMemorystream;
begin
  stream:= TMemoryStream.Create;
  kompstream:= TFileStream.Create(savedlg2.filename, fmCreate);
  
  try
    vst.SaveToStream(stream);
    CompressStream(stream, kompstream);
  finally
    stream.free;
    kompstream.Free;
  end;

end;
Danke und Euch allen ein schönes WE,
Frieder
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz