java: Zip Exception de codes non valides longueur?
Quand je suis à l'écriture d'entrées dans un fichier zip comme ceci:
ZipEntry ze = zin.getNextEntry();
while (ze != null) {
InputStream is = zf.getInputStream(ze);
zos.putNextEntry(ze);
int len;
while ((len = is.read(buffer)) >= 0) {
zos.write(buffer, 0, len);
}
zos.closeEntry();
ze = zin.getNextEntry();
}
- Je obtenir de l'exception suivante sur la deuxième boucle while:
java.util.zip.ZipException: invalid code lengths set
at java.util.zip.InflaterInputStream.read(InflaterInputStream.java:164)
at java.io.FilterInputStream.read(FilterInputStream.java:107)
Quelqu'un sait pourquoi cette exception est levée et ça veut dire quoi?
P. S. je dois préciser que je suis en cours d'exécution sur une des auditeurs sur JBoss 7.1.1 pour zip vaious journal de fichiers dans des dossiers différents. Il y a un thread pour chaque dossier. Le fait de l'utilisation de plusieurs threads conduire à ce problème?
Vous devez vous connecter pour publier un commentaire.
Vous définissez la
ZipEntry
du nouveau fichier zip à la même instance que vous avez obtenu à partir du fichier d'origine. Cela implique que toutes les valeurs doivent correspondre, mais cela échoue si la taille compressée de l'écrit d'entrée ne correspond pas à la taille compressée du fichier source. Et le plus petit peu de différence entre l'original du code de compression et de celui que vous utilisez aujourd'hui rendement de différents formats compressés. Pour le faire fonctionner, vous devez créer une copie de laZipEntry
pour la sortie et de réinitialiser la taille compressée sur elle.Par le chemin, vous utilisez
zin.getNextEntry()
etzf.getInputStream(ze)
dans votre code qui implique que vous soyez à l'aide d'unZipFile
et unZipInputStream
en même temps. Si ils font référence au même fichier, c'est un gaspillage de ressources, si elles se réfèrent à des types de fichiers, vous pouvez vous attendre à encore plus de problèmes.Décider, soit
ZipFile
ou
ZipInputStream