J'ai besoin de compresser des données provenant d'un flux et de mettre des données compressées dans un autre. Voici le code qui fonctionne avec les fichiers (MyOutputStream
est un simple wrapper FileOutputStream utilisé à des fins de débogage). Ce code fonctionne bien.ZipOutputStream n'écrit pas le contenu du fichier
ZipOutputStream jos = new ZipOutputStream(new MyOutputStream(new FileOutputStream(zipFileName)));
jos.setLevel(Deflater.DEFAULT_COMPRESSION);
jos.putNextEntry(new ZipEntry("test.txt"));
FileInputStream in = new FileInputStream("test.txt");
int len;
while ((len = in.read(buffer)) > 0){
jos.write(buffer, 0, len);
}
jos.closeEntry();
jos.close();
Dans ma vraie application, je dois faire face à des flux plus complexes. En fait, les flux sont utilisés pour CORBA interop. Cependant, les données sont lues avec succès. Mais lorsque j'essaie de faire jos.write(buffer, 0, len);
, aucune donnée n'est écrite dans le flux de sortie sous-jacent à ZipOutputStream. Cependant, les en-têtes de fichiers zip, les commentaires d'entrées et le répertoire central sont écrits avec succès, donc je reçois un zip absolument valide avec une seule exception: les fichiers sont vides.
Peut-être que quelqu'un avait déjà vu ce comportement auparavant? Toute aide est appréciée.
EDIT Voici mon code réel tel qu'il peut être utile:
String fileName = fullSourcePath.substring(fullSourcePath.lastIndexOf('\\') + 1, fullSourcePath.length());
WrapperOutputStream out = new WrapperOutputStream(newexchangeStream64);
ZipOutputStream jos = new ZipOutputStream(out);
jos.setLevel(Deflater.NO_COMPRESSION);
jos.putNextEntry(new ZipEntry(fileName));
jos.setComment("Comment");
IDLDataHolder data = new IDLDataHolder();
LongHolder dataAmount = new LongHolder();
LongHolder written = new LongHolder();
while (true) {
exchangeStream64.Read(data, READ_AMOUNT, dataAmount);
if (0 == dataAmount.value) {
break;
}
jos.write(data.value, (int)dataAmount.value, (int)written.value);
}
jos.closeEntry();
jos.close();
Pourriez-vous poster cette partie particulière de votre application? Ou est-ce trop grand? – thejh
Ajout d'un vrai code – Ola
Je ne sais pas 'IDLDataHolder' - est-ce un tampon avec une taille supérieure à zéro? – thejh