Ich versuche, einen Speicherblock zu dekomprimieren, aber ich weiß nicht, dass es original unkomprimierte Größe ist, aber ich kenne die maximale Größe, die dieser ursprüngliche Speicherblock jemals sein könnte.LZ4 Dekomprimieren binärer Speicherblock unbekannter Größe
Gibt es eine Möglichkeit, mit LZ4 zu dekomprimieren, ohne die ursprüngliche unkomprimierte Größe zu kennen?
Short-Story-Long: Ich bin eine Reihe von Variablen in einem Stringstream Serialisierung mit einem Drittanbieter-Bibliothek namens Cereal. Cereal serialisiert Ihre Daten in einem Stringstream unter Verwendung eines 'portable binary formats', was bedeutet, dass die Endianness bei der Deserialisierung beibehalten und sogar zu der der Host-Maschinen konvertiert wird. Der Stringstream wird dann unter Verwendung von LZ4 komprimiert und an eine entfernte Maschine zur Dekomprimierung und Deserialisierung übertragen.
Mein Problem ist, dass LZ4 einen Speicherblock komprimierter Daten und eine Ganzzahl ausgeben wird, die die Größe der komprimierten Daten angibt. Zum Entpacken benötigen Sie die komprimierte Größe und Originalgröße und ich sende nur den komprimierten Datenblock an die Remote-Maschinen.
SO, gibt es eine Möglichkeit, einen Datenblock mit LZ4 zu dekomprimieren, ohne zu wissen, dass es original komprimierte Größe ist? Im Wesentlichen 'Start Dekompression, wenn Sie keine Daten fertig sind'
'LZ4_decompress_safe (const char * Quelle, char * dest, int komprimierteSize, int maxDecompressedSize)' erfordert compressedSize; Übergeben 0/NULL führt zu einer fehlgeschlagenen Dekomprimierung. Alle Dekomprimierungsmethoden fragen nach compressedSize/originalSize, das unbekannt ist, aber einen maximalen Wert hat. – KKlouzal
Meinst du, dass Sie nicht die komprimierte Größe, dekomprimierte Größe oder keine von beiden haben? –
Ich kenne die "wahre" komprimierte Größe nicht; Es kann nur 500 Bytes sein, wird aber in einem größeren Puffer von 1436 Bytes gehalten. Das Übergeben von 1436 als "compressedSize" schlägt fehl, wobei das Überschreiten von 500 erfolgreich ist. – KKlouzal