Mit Java NIO können Sie Dateien schneller kopieren. Ich habe zwei Methoden hauptsächlich über das Internet gefunden, um diesen Job zu machen.
%Vor%In 20 sehr nützliche Java-Code-Snippets für Java Entwickler Ich habe einen anderen Kommentar und Trick gefunden:
%Vor%Aber ich habe nicht gefunden oder verstanden, was
bedeutet"magische Zahl für Windows, (64Mb - 32Kb)"
Es besagt, dass inChannel.transferTo(0, inChannel.size(), outChannel)
in Windows ein Problem hat, 32768 (= (64 * 1024 * 1024) - (32 * 1024)) Byte ist für diese Methode optimal.
Windows hat eine harte Grenze für die maximale Übertragungsgröße, und wenn Sie diese überschreiten, erhalten Sie eine Laufzeitausnahme. Sie müssen also stimmen. Die zweite Version, die Sie angeben, ist besser, weil sie nicht davon ausgeht, dass die Datei vollständig mit einem transferTo()
-Aufruf übertragen wurde, was mit dem Javadoc übereinstimmt.
Die Übertragungsgröße von mehr als 1 MB ist sowieso ziemlich sinnlos.
BEARBEITEN Ihre zweite Version hat einen Fehler. Sie sollten size
um den übertragenen Betrag verringern. Es sollte eher wie folgt aussehen:
Ich habe gelesen, dass es für die Kompatibilität mit dem Windows 2000-Betriebssystem ist.
Quelle: Ссылка
Quote: In win2000 überträgt der transferTo () keine Dateien & gt; als 2 ^ 31-1 Bytes. Es wird die Ausnahme "java.io.IOException: Es werden nicht genügend Systemressourcen vorhanden, um den angeforderten Dienst auszuführen, ausgelöst." Die Problemumgehung besteht darin, jedes Mal in einer Schleife 64 MB zu kopieren, bis keine Daten mehr vorhanden sind.
Es scheint anekdotische Beweise dafür zu geben, dass Versuche, mehr als 64 MB gleichzeitig auf bestimmten Windows-Versionen zu übertragen, zu einer langsamen Kopie führen. Daher die Überprüfung: Dies scheint das Ergebnis einiger Details des zugrunde liegenden systemeigenen Codes zu sein, der die Operation transferTo
unter Windows implementiert.
Tags und Links java nio file-copying