2010-08-24 5 views
0

Je dois passer un InputStream en tant que paramètre à une bibliothèque tierce qui lira le contenu complet de l'InputStream et fera son travail.Comment lire plusieurs entrées ZipEntries via un seul InputStream

Mon problème est, certains de mes fichiers sont des fichiers Zip - avec plus d'un ZipEntry. D'après ce que je comprends, on peut lire un zipEntry à la fois, puis faire un zipInputStream.getNextEntry() et puis lire à nouveau et ainsi de suite. Mais, la bibliothèque 3ème partie ne comprend pas cela et attend un seul InputStream. Toutes les zipEntries d'un fichier zip doivent être disponibles en tant que inputStream unique.

S'il vous plaît, éclairez-moi sur la façon de le faire. Je ne peux pas utiliser ZipFile car le fichier n'est pas stocké localement (sur un serveur différent). Je ne peux pas non plus lire tous les zipEntries et construire un ByteArrayOutputStream ou une chaîne car les fichiers peuvent être très gros et cela augmentera l'utilisation de la mémoire.

Je veux un moyen de laisser un inputStream lire de plusieurs entrées zip d'un seul fichier zip de manière transparente.

merci à l'avance, Prasanna

+0

Il serait utile de nous dire quelle bibliothèque 3ème partie que vous utilisez, je devine SharpZipLib (http://www.icsharpcode.net/opensource/sharpziplib/) sur la base types que vous mentionnez dans votre question =) – Rob

Répondre

0

Je ne suis pas expert, mais je vois deux façons de faire ce que vous demandez:

Bien que je ne parlerais pas, l'image fidèle de la façon la plus efficace méthode infaillible est de tous les écrire dans un tampon, puis utiliser ce tampon pour alimenter un flux d'entrée. Vous pouvez regarder dans un ByteArrayOutputStream, le nourrir votre ZipEntries, et ensuite créer un ByteArrayInputStream avec le même buf

Alternativement, le SequenceInputStream sonne comme vous le voulez, mais je n'ai pas eu l'occasion de le regarder. dans beaucoup de détails.

K.Barad

Questions connexes