Umgang mit gezippten Inhalten auf Android

8

Ich versuche, eine Datei aus dem Web auf Android mit der DOM-Methode zu analysieren.

Der fragliche Code lautet:

%Vor%

Aber ich bekomme die folgende Ausnahme:

%Vor%

Die Datei wird mir gezippt. Ich habe das Objekt is im Debugger überprüft und seine Länge beträgt 6733 Bytes (die gleiche wie die Länge der Datei in den Antwortheadern), aber wenn ich die Datei auf meiner Festplatte vom Browser speichern, ist ihre Größe 59114 Bytes . Außerdem, wenn ich es auf meinen eigenen Server hochlade, der XML-s nicht gzip, wenn es ihnen dient und die URL setzt, läuft der Code gut.

Ich vermute, dass Android versucht, den gezippten Stream zu parsen.

Gibt es eine Möglichkeit, den Stream zuerst zu entpacken? Irgendwelche anderen Ideen?

    
janosrusiczki 03.10.2010, 00:20
quelle

2 Antworten

21

Sie können das Ergebnis von url.openStream() in einen GZIPInputStream umbrechen. zB:

%Vor%

Um dies automatisch zu erkennen, verwenden Sie den Content-Encoding-HTTP-Header. zB:

%Vor%     
Laurence Gonsalves 03.10.2010, 00:29
quelle
3
  

Standardmäßig fordert diese Implementierung von HttpURLConnection das an   Server verwenden Gzip-Komprimierung. Da getContentLength () den Wert zurückgibt   Anzahl der übertragenen Bytes, können Sie diese Methode nicht verwenden, um vorherzusagen, wie   Viele Bytes können von getInputStream () gelesen werden. Lies das stattdessen   streamen, bis sie erschöpft ist: wenn read () -1 zurückgibt. Gzip-Komprimierung   kann deaktiviert werden, indem die zulässigen Kodierungen in der Anforderung festgelegt werden   Überschrift:

     

urlConnection.setRequestProperty ("Accept-Encoding", "Identität");

also nichts tun müssen.

    
itindex 28.10.2011 04:18
quelle

Tags und Links