2009-04-21 12 views
2

Ich benutze MiniLZO für ein Projekt für einige wirklich einfache Kompressionsaufgaben. Ich komprimiere mit einem Programm und dekomprimiere mit einem anderen. Ich würde gerne wissen, wie viel Platz für den Dekompressionspuffer zu reservieren ist. Ich bin in Ordnung mit zu viel Speicherplatz, wenn es mir die Mühe ersparen kann, meine Ausgabedatei mit einer Ganzzahl zu kommentieren, die deklariert, wieviel Platz die dekomprimierten Daten nehmen sollten. Wie würde ich herausfinden, wie viel Platz es möglicherweise könnte?LZO Dekompressionspuffer Größe

Nach ein paar Überlegungen, ich denke, diese Frage läuft auf die folgenden: Was ist das maximale Kompressionsverhältnis von Lzo1x Kompression?

Antwort

4

Da Sie sowohl den Kompressor als auch den Dekompressor steuern, empfehle ich Ihnen, die Eingabe in Blöcken fester Größe zu komprimieren. In meiner Anwendung ich in jedem Block zu 64KB komprimieren, dann emittieren, um die Größe des komprimierten Blocks und der komprimierten Daten selbst, so dass der komprimierte Strom sieht tatsächlich aus wie eine Reihe von komprimierten Blöcke:

length_of_block_1 
block_1 
length_of_block_2 
block_2 
... 

Der Dekompressor gerade liest jeder komprimierte Block und dekomprimiert es in einen 64 KB Puffer, da ich weiß, dass der Block durch Komprimieren eines 64 KB Blocks erzeugt wurde.

Hoffnung, dass

Eric Melski

+0

Dies ist auch ein guter Vorschlag, aber es fügt Anmerkungen hinzu - genau das, was ich vermeiden wollte. Daher kann ich auch meine Daten einfach in einem Block komprimieren (so wie sie bereits gespeichert sind) und sie mit der Blockgröße annotieren. – Benson

+0

Ich dachte, Sie wollten nur vermeiden, die * dekomprimierte * Größe in der Ausgabe zu speichern. Ich glaube nicht, dass Sie vermeiden können, eine Art Blockende-Markierung zu speichern, es sei denn, Sie stellen sicher, dass die Eingangsblöcke immer kleiner als N Bytes sind. dann hat jeder komprimierte Stream genau einen Block, so dass Sie kein Trennzeichen benötigen. Oder Sie könnten den Dekompressor erweitern, um ein Teilergebnis und einen "mehr zu tun" -Code zurückzugeben, wenn er den Puffer füllt, so dass Sie ihn wiederholt aufrufen könnten, um die gesamte Eingabe zu dekomprimieren. –

+0

Alle guten Vorschläge, aber ich denke, dass das Speichern der Größe des dekomprimierten Puffers einfacher wäre. Also, ich denke, die Antwort auf meine Frage ist "komm vorbei und notiere mit der dekomprimierten Größe". – Benson

2

Die maximale Größe der dekomprimierten Daten entspricht eindeutig der Maximalgröße der komprimierten Daten.

Wenn es eine Obergrenze für die Eingabegröße gibt, dann kann ich sie verwenden, aber ich muss sagen, dass das Hinzufügen eines Headers zu Ihrem komprimierten Puffer, der die unkomprimierte Größe angibt.

+0

Dank hilft, werde ich mir merken. Leider habe ich auch keine Kontrolle über die maximale Größe. Es sieht so aus, als müsste ich wahrscheinlich einen Header hinzufügen, wenn ich das sicher machen will. – Benson