La décompression d'un fichier à partir d'InputStream et revenir un autre InputStream
Je suis en train d'écrire une fonction qui accepte un InputStream
avec zip fichier de données et qu'il va revenir un autre InputStream
avec décompressé données.
Le fichier zip ne contient qu'un seul fichier et donc il n'est pas nécessaire de créer des répertoires, etc...
J'ai essayé de regarder ZipInputStream
et les autres, mais je suis déconcerté par tant de différents types de flux en Java.
- Qu'avez-vous déjà essayer? Veuillez ajouter un peu de code exemple.
Vous devez vous connecter pour publier un commentaire.
Concepts
GZipinputstream est pour les cours d'eau (ou fichiers) technique que gzip (".gz" extension). Il ne dispose pas d'informations d'en-tête.
Si vous avez un vrai fichier zip, vous devez utilisateur ZipFile pour ouvrir le fichier, demandez la liste de fichiers (dans votre exemple) et demander le décompressé flux d'entrée.
Votre méthode, si vous avez le fichier, serait quelque chose comme:
La lecture d'un InputStream avec le contenu d'un .fichier zip
Ok, si vous avez un InputStream vous pouvez utiliser (comme @cletus dit) ZipInputStream. Il lit d'un ruisseau y compris les données d'en-tête.
Important: si vous avez le fichier sur votre ordinateur, vous pouvez utiliser
ZipFile
classe pour l'accès au hasardCeci est un exemple de lecture d'un fichier zip par un InputStream:
zis.read()
où les données? Mon fichier zip va contenir qu'un seul fichier et je veux juste de retour d'un flux de fichier non compressé des données.Si vous pouvez modifier les données d'entrée, je vous suggère d'utiliser
GZIPInputStream
.GZipInputStream
est différente deZipInputStream
puisque vous n'avez données à l'intérieur. Ainsi, l'ensemble de flux d'entrée représente la totalité du fichier. DansZipInputStream
l'ensemble du flux de données contient également la structure du fichier(s) à l'intérieur, qui peuvent être nombreux.C'est sur scala syntaxe:
Sauf si je suis en manque de quelque chose, vous devez absolument essayer et obtenir de l'
ZipInputStream
de travail et il n'y a pas de raison que ça ne devrait pas (j'ai déjà utilisé à plusieurs reprises).Ce que vous devez faire est d'essayer et obtenir de l'
ZipInputStream
de travail et si vous ne pouvez pas, poste le code et nous allons vous aider avec tout ce problèmes que vous rencontrez.Quoi que vous fassiez bien, n'essayez pas de réinventer sa fonctionnalité.
java.util.zip
est assez désagréable de l'API