Ich bin ein Praktikant Forschung darüber, ob die Verwendung von Brotli Kompression in einer Software bietet eine Leistungssteigerung gegenüber der aktuellen Version, die GZip verwendet.Gibt es eine Möglichkeit zu überprüfen, ob ein Puffer im Brotli-Format vorliegt?
Meine Aufgabe ist es, alles mit GZip zu ändern, stattdessen Brotli Kompression zu verwenden. Eine Funktion, die ich ersetzen muss, überprüft, ob ein Puffer Daten enthält, die mit GZip komprimiert wurden. Es tut dies durch die Stromkennung am Anfang überprüft und Ende:
bool isGzipped() const
{
// Gzip file signature (0x1f8b)
return
(_bufferEnd >= _bufferStart + 2) &&
(static_cast<unsigned char>(_bufferStart[0]) == 0x1f) &&
(static_cast<unsigned char>(_bufferStart[1]) == 0x8b);
}
I ähnliche Funktion bool isBrotliEncoded()
erstellen möchten. Ich frage mich, ob es eine ähnliche schnelle Überprüfung gibt, die mit Brotli-kodierten Puffern durchgeführt werden kann? Ich habe mir die Byte-Werte für einige der komprimierten Dateien angesehen, die brotli produziert, aber ich kann keine Regel finden, die für alle von ihnen gilt. Einige beginnen mit 0x5B
, andere mit 0x1B
, Komprimierung von leeren Dateien führt zu 0x06
, und Dateien, die mehrere Male komprimiert wurden, beginnen mit einer Reihe unterschiedlicher Werte. Das Ende jeder Datei ist ebenfalls inkonsistent.
Die einzige Möglichkeit zu testen, ob es im richtigen Format ist, ist Dekompression versuchen und warten auf einen Fehler, der den Zweck dieses Tests vereitelt.
Also meine Frage ist: Weiß jemand, wie man überprüft, ob ein Puffer mit Brotli komprimiert wurde, ohne Dekompression zu versuchen und auf Fehler zu warten?
OK, danke für die informative Antwort :) Ich bin vielleicht in der Lage, mit einer Anforderung, dass komprimierte Dateien haben die richtige Dateierweiterung bekommen, aber ich werde auf jeden Fall halten Sie Ihr Framing-Format für die zukünftige Verwendung. – naffarn