2010-04-26 6 views
5

Kann ich mich auf die ersten paar Bytes von Daten verlassen, die komprimiert wurden, indem der System.IO.Compression.DeflateStream in .NET immer derselbe ist?Wie kann ich feststellen, ob ein Byte-Array bereits komprimiert wurde?

Dieses Bytes scheinen immer das erste Bytes zu sein: 237, 189, 7, 96, 28, 73, 150, 37, 38, 47, ...

ich dies unter der Annahme, ist eine Art von Kopfzeile möchte ich annehmen, dass diese Kopfzeile fest ist und sich nicht ändern wird.

Hat jemand irgendwelche zusätzlichen Informationen darüber?

Background info (Der Grund, warum ich diese Informationen wissen wollen, ist ...)

Ich habe eine Last von Daten in einer Datenbanktabelle, die mit dem Sein kleiner machen könnte. Ich habe mich entschlossen, die Daten zu komprimieren und die bestehenden Daten nicht zu komprimieren. Wenn die Daten in meinen .NET-Code gelangen, sind die Daten ein String.

Ich möchte in der Lage sein, die ersten paar Bytes der Zeichenfolge zu sehen und sehen, ob es komprimiert wurde, wenn es dann muss ich es dekomprimieren.

Ich dachte ursprünglich, ich könnte die Zeichenfolge in Bytes konvertieren und einfach versuchen, die Daten zu komprimieren. Wenn eine Ausnahme auftritt, könnte ich einfach annehmen, dass sie nicht komprimiert ist. Aber ich denke, die Überprüfung der Header-Bytes würde mir viel bessere Leistung geben.

Vielen Dank, Mike G

Antwort

1

sicher zu sein (es sei denn, dies irgendwo dokumentiert ist), Ihre eigenen Magie-Header an der Front bleiben. Eine GUID ist dafür eine gute Wahl.

+0

Danke, ich denke, ich werde für dieses eine, gute Querdenken gehen! (Ich verwende NET 4 noch nicht, so dass die andere Antwort nicht für mich verwendbar ist) – MikeG

0

Es wurden einige Verbesserungen an GZipStream in .NET 4.0 vorgenommen, die dies verhindern. Vielleicht auf .NET migrieren ist eine Option:

Die Kompressionsalgorithmen in System.IO.Compression verbessert wurden in .NET 4. DeflateStream und GZipStream nicht mehr aufblasen bereits komprimierte Daten. source

Verwandte Themen