J'appelle un service qui renvoie un fichier gzippé. J'ai les données comme une intrigue (avec la courtoisie de Ce que je voudrais faire est, sans rien écrire sur le disque, obtenez une intrigue des données décompressées dans le fichier dans l'archive. Le fichier compressé dans ce cas est un document XML que j'essaie de mobilalhal en utilisant Je tente actuellement d'écrire l'intrigue à une sortie de sortie (décompresser les données), puis je devrai l'écrire sur une intrigue. Ça ne marche pas encore, je pensais que je verrais que je verrais s'il y avait une approche meilleure (j'espère). P> Je peux écrire l'intrigue initiale sur disque et obtenir un fichier GZ, puis lisez ce fichier, puis lisez ce fichier, puis lisez ce fichier, puis lisez ce fichier, Obtenez le fichier compressé en dehors de celui-ci et passez à partir de là, mais je préfère le maintenir tout en mémoire est possible. p> Mise à jour 1: Voici mon article actuel (ne fonctionne pas - Obtenez un "Pas en format gzip" Exception): P> javax.activation.datahahnandler.getinputStream (); code>) à partir de la réponse.
javax.xml.bind.unmarshaller code> qui prend une intrigue. P>
ByteArrayInputStream xmlInput = null;
try {
GZIPInputStream gzipInput = new GZIPInputStream(dh.getInputStream());
ByteArrayOutputStream bo = new ByteArrayOutputStream();
int bytes_read = 0;
byte[] dataBuf = new byte[4096];
while ((bytes_read = gzipInput.read(dataBuf)) != -1) {
bo.write(dataBuf, 0, bytes_read);
}
xmlInput = new ByteArrayInputStream(bo.toByteArray());
3 Réponses :
Jetez un coup d'oeil à gzipinputtream. Voici un exemple ; La classe gère cela très de manière transparente, il n'est presque pas de travail à utiliser. P>
Juste curiosité: pourquoi expliter l'explication 1.4.2? Pourquoi pas seulement le dernier comme disponible ici? Java.sun.com/javase/6/ Docs / API / Java / Util / Zip / ...
Désolé, j'aurais dû aller avec "Je pense d'abord être disponible en 1.4.2". Laissez-moi éditer celui-là. :-)
Je regarde GzipInputStream dans ce que je travaille actuellement avec bien que je reçois une exception "non au format gzip". Je ne comprends pas cela comme je peux écrire le fichier sur le disque et il s'agit d'un fichier compressé (GZIP selon la documentation). Je vais ajouter ce que je (ne fonctionne pas) a à la question.
Il peut s'agir d'un format zip clair au lieu de gzip? Essayez également ZipInputStream et rapporte-vous?
Le code suivant devrait fonctionner. Gardez à l'esprit que vous devrez manipuler des exceptions correctement.
OutputStream out = null; InputStream in = null; try { out = /* some output stream */; in = new java.util.GZIPInputStream(/*some stream*/); byte[] buffer = new byte[4096]; int c = 0; while (( c = in.read(buffer, 0, 4096)) > 0) { out.write(buffer, 0, c); } } finally { if (in != null) { in.close(); } if (out != null) { out.close(); } }
On dirait qu'un gros problème était que Ebay a dit qu'ils me donnaient une gzip mais c'était en fait un zip.