Zlib in Ruby dekomprimieren .gz

7

Ich habe eine .gz-Datei, die ein XML-Dokument enthält. Kann jemand Zlib richtig benutzen? Bisher habe ich folgenden Code:

%Vor%

Aber das erstellt ein leeres XML-Dokument. Weiß jemand, wie ich das richtig machen kann?

    
Bobby 02.07.2010, 22:03
quelle

2 Antworten

22

Zlib::GzipReader funktioniert wie die meisten IO -ähnlichen Klassen in Ruby. Sie haben einen Aufruf von open , und wenn Sie einen Block an ihn übergeben, erhält der Block das IO -like-Objekt. Stellen Sie sich vor, Sie können während der Blockdauer mit einer Datei oder Ressource etwas bequem machen.

Aber das bedeutet, dass gz in Ihrem Beispiel ein IO -ähnliches Objekt ist und nicht wie erwartet der Inhalt der gzip-Datei. Du musst noch read davon haben, um das zu erreichen. Die einfachste Lösung wäre dann:

%Vor%

Beachten Sie, dass dadurch der gesamte Inhalt des unkomprimierten gzip in den Speicher gelesen wird.

Wenn Sie wirklich nur von einer Datei in eine andere kopieren, können Sie die effizientere Methode IO.copy_stream verwenden. Ihr Beispiel könnte dann so aussehen:

%Vor%

Hinter den Kulissen wird versucht, den in bestimmten Situationen unter Linux verfügbaren sendfile syscall zu verwenden. Andernfalls wird das Kopieren in schnellen C-Code-Blöcken von 16 KB gleichzeitig ausgeführt. Dies habe ich aus dem Quelltext von Ruby 1.9.1 gelernt.

    
Stéphan Kochen 02.07.2010, 22:17
quelle
2

Hier ist ein Ruby-Einzeiler (cd .git / first und Pfad zu einem beliebigen Objekt):

%Vor%     
tuxdna 28.12.2011 21:07
quelle

Tags und Links