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?
Sie können das Ergebnis von url.openStream()
in einen GZIPInputStream umbrechen. zB:
Um dies automatisch zu erkennen, verwenden Sie den Content-Encoding-HTTP-Header. zB:
%Vor%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.