Hallo,
der Algorithmus wäre so:
1. einen java.util.zip.ZipInputStream öffnen
2. nächstes java.util.zip.ZipEntry lesen
3. eine neue Instanz von java.util.zip.CRC32 anlegen
4. mit ZipInputStream.read(...) Daten in einen Cache (z.b. 100000 Byte) schaufeln
5. den Cache an CRC32.update(...) übergeben
6. wenn man so alle Daten aus dem aktuellem ZipEntry ausgelesen hat, muss man nur noch CRC32.getValue() und ZipEntry.getCrc() miteinander vergleichen. Stimmen die Zahlen überein, ist dieser Eintrag in der Zip-Datei korrekt, wenn nicht, dann ist dieser Eintrag beschädigt.
7. das Ergebnis des Vergleichs entweder ausgeben oder in einer Liste speichern.
8. fahre mit Punkt 2 solange fort, bis kein ZipEntry im ZipInputStream mehr ist.
9. ZipInputStream schließen und Ergebnis für die gesamte Datei erstellen.
Dieses Verfahren hat einen Hacken. Die CRC32 Angabe in der Zip-Datei ist optional. Wenn diese Angabe also in der Zip-Datei fehlt oder falsch ist, lässt sich die Konsistenz nicht bestätigen, auch wenn die Einträge vielleicht korrekt sind. Bei fehlender Angabe liefert ZipEntry.getCrc() -1L zurück. Weiterhin sollte java.util.zip.Adler32 das selbe wie java.util.zip.CRC32 machen, nur schneller, aber ich habe es nie ausprobiert.
Slawa