Komprimiere den Gzip-String in Ruby
Wie schreibe ich eine Methode zum Komprimieren eines Gzip-Strings, der keine Header-Datei enthält, und lasse ihn genau so komprimieren, wie er war, bevor ich ihn dekomprimiert habe? Die ursprüngliche Komprimierung erfolgt in C #, und ich fülle Ruby mit der folgenden Methode auf:
EDIT: im Grunde genommenIch hätte gerne die passende Deflate-Methode dazu aufblasen:
def inflate(string)
zstream = Zlib::Inflate.new(-Zlib::MAX_WBITS)
buf = zstream.inflate(string)
zstream.finish
zstream.close
buf
end
Vor dem Dekomprimieren lautet die Zeichenfolge:
"5\x891\n\xC30\x10\x04{\xBDb\xEB\xE0F&\x81\xA4\xCA3\xDC\xA81\xD2\x1A]\xA1\x13\xB1.\x100\xFEF\xDE\e\x19\x9Cb\x99Yf\xCA\xB3A\x1A,\x13\xB1\x96R\x15I\x96\x85+5\x12\xA2=\xF4:\xAFb\xB9\xD0$\xA2\xF1\xF5>\xDA\xD3\xB9\x9A\xA8f\xFC\xD8\xE6\xFD\x00\x7F\xEB{\f!Uk{\xCF,\x91\xDC\x1C\x10J\xC4\xF7z\xCA\xE8p9\xF8\xFF\xF7\x93\xDEw\xD9\x7F"
Und nach dem Dekomprimieren mit inflate ist es:
"What is the common difference in this arithmetic sequence?\n\n\\indenttext{11, 15, 19,\\dots}\n\n\\emcee{\n \\mc \x964\n \\mc 2\n *\\mc 4\n \\mc 8\n \\mc 11\n }"
Ich habe versucht, mehrere Deflate-Methoden zu erstellen, aber keine, die es wieder auf das Original bringen kann. Danke für Ihre Hilfe!
BEARBEITEN: Die ursprüngliche Komprimierung wurde in .NET 2.0 folgendermaßen durchgeführt
byte[] compressedStringBytes = CompressGzipString(String);
und CompressGzipString macht:
MemoryStream compressed = new MemoryStream();
DeflaterOutputStream zosCompressed = new DeflaterOutputStream(compressed, new Deflater(Deflater.BEST_COMPRESSION, true));
zosCompressed.Write(data, 0, data.Length);
Wenn es nicht möglich ist, es auf das genaue Original zu bringen, was wäre die standardisierteste Komprimierung, mit der ich allgemein meine und die auf die gleiche Weise wie das Original dekomprimiert werden könnte?