Mám tady problematický 350mg zip archiv, se spoustou souborů. Nativnímu windows unzipu to trvá několik minut, než to odzipuje. 7zip to má za 4 vteřiny. A teď Java, ta si dnes u mě šplhla:
Nejprve to vypadalo bledě. Použil jsem ze standardního JDK ZipFile a k tomu standardní 50x olajkovaný source code ze stackoverflow. Uvařil jsem si kávu, pohladil jsem psa a sednul k tomu. Výsledek? Naprostá katastrofa, trvalo to několik minut a počítač hořel!!! Zkoušel jsem to zparalelizovat, CPU jsem vytížil na 100% a stejně to trvalo několik minut. Už už jsem nadával, že si standardní knihovna z JDK nedokáže pořádně svižn odzipovat soubory, vzhledem k tomu že JARko je zip. Ale nevzdal jsem se. Odskočil jsem si na záchod, vrátil se k PC a začal jsem Googlit.
Tak jsem googlil a našel jsem knihovnu Zip4J. Neskutečná záležitost! Vážení, 6 vteřin a je to kompletně odzipované!!! A navíc to konečně dělal člověk a tak se to dobře používá:
try {
ZipFile zipFile = new ZipFile(input);
zipFile.extractAll(output.getPath());
} catch (ZipException e) {
e.printStackTrace();
}
A tohle je ten pomalý hrozivý ZipFile z JDK, tragedie:
try (ZipFile archive = new ZipFile(archiveFile.toFile())) {
// sort entries by name to always created folders first
List<? extends ZipEntry> entries = archive.stream()
.sorted((a, b) -> a.getName()
.compareTo(b.getName()))
.collect(Collectors.toList());
// copy each entry in the dest path
for (ZipEntry entry : entries) {
Path entryDest = destPath.resolve(entry.getName());
if (entry.isDirectory()) {
Files.createDirectory(entryDest);
continue;
}
Files.copy(archive.getInputStream(entry), entryDest);
}
}
V JDK by se měli pochlapit a ten hrozný ZipFile smazat.
HOŠI, víte co to znemená? Že jsme to zase těm C-šerpistům nandali
Ale ten hlavní důvod proč to píšu je, jakto že je to sakra skoro tak rychlé jako v céčku psaný 7zip???