Ich verwende Java, um den MD5-Hash für einige Dateien zu generieren. Ich brauche ein MD5 für mehrere Dateien mit einer Gesamtgröße von etwa 1 Gigabyte. Hier ist mein Code:
%Vor%}
Das scheint für immer zu laufen. Wie kann ich es effizienter machen?
Vielleicht möchten Sie die Fast MD5 -Bibliothek verwenden. Es ist viel schneller als der eingebaute MD5-Provider von Java und das Erzielen eines Hash ist so einfach wie:
%Vor%Beachten Sie, dass die langsame Geschwindigkeit auch durch langsames Datei-I / O verursacht werden kann.
Ich überschreibe deinen Code mit nio, der Code ist ungefähr wie folgt:
%Vor%Auf meinem Rechner dauert es etwa 30 Sekunden, um MD5-Code für eine große Datei zu generieren, und natürlich teste ich auch Ihren Code, das Ergebnis zeigt an, dass nio die Leistung des Programms nicht verbessert.
Dann versuche ich die Zeit für io und md5 zu bekommen, die Statistik zeigt an, dass die langsame Datei io der Flaschenhals ist, weil für io etwa 5/6 Zeit genommen wird.
Bei Verwendung der von @Sticky erwähnten Fast MD5-Bibliothek dauert es nur 15 Sekunden, um MD5-Code zu generieren, die Verbesserung ist bemerkenswert.
Wenn Geschwindigkeit ein Problem ist und Sie eine Datei von einer URL herunterladen und möchten, dass MD5 gleichzeitig berechnet wird (dh die Datei nicht speichern, erneut öffnen und erneut lesen, um MD5 zu erhalten) Meine Lösung in Ссылка könnte hilfreich sein. Es basiert auf Bloodwulfs Codeschnipsel hier in diesem Thread (danke!) Und erweitert es nur ein wenig.
Tags und Links java performance file md5 checksum