Aimez ce site! Mon problème est le suivant:ZipInputStream ne signale pas * réel * (c'est-à-dire compressé) octets lu
Je lis un fichier zip qui arrive sur un réseau à partir d'une requête HTTP "PUT". L'en-tête de demande me dit que la longueur de contenu est (disons) 1Mb. Le code suivant crée le ZipInputStream, et enregistre le contenu zip aux fichiers dans le répertoire courant:
ZipInputStream zis = new ZipInputStream(inputStream);
ZipEntry ze;
long totalBytesRead = 0;
while ((ze = zis.getNextEntry()) != null) {
BufferedOutputStream outStream = new BufferedOutputStream(new FileOutputStream(ze.getName()));
byte[] buffer = new byte[4096];
int i;
while ((i = zis.read(buffer)) != -1) {
totalBytesRead+=i;
outStream.write(buffer,0,i);
}
outStream.close();
}
inputStream.close();
Quand tout est dit et fait, totalBytesRead
est égale à environ 1,5 Mo (en fonction de la compression des fichiers, pourrait être quoi que ce soit bien!). Ce que je voudrais savoir est s'il y a un moyen de savoir combien d'octets réels ont été lus à partir de l'original inputStream
? Les deux ze.getSize()
et ze.getCompressedSize()
renvoient -1 pour chaque entrée compressée (c'est-à-dire qu'elle ne sait pas). J'ai besoin de cette information pour une barre de progression pour montrer combien d'octets du fichier zip transmis ont été lus sur le réseau.
Suggestions? Devrais-je peut-être sous-classer ZipInputStream et essayer de savoir combien d'octets il lit à partir de son InputStream enveloppé?
Merci d'avance!
pourquoi le constructeur 'protected'? –