SPEISEKARTE

Java-Dateikopie (einfach und schnell)

Inhaltsverzeichnis

Java-Dateikopie (einfach und schnell)FileChannel#transferTo

Auf JavaDatei kopierenHierfür stellen wir ein Beispielprogramm vor.
Das Beispielprogramm basiert auf der in J2SE1.4 eingeführten neuen E/A. java.nio.channels.FileChannel#transferTo Methode.
Sie können ein Kopierverarbeitungsprogramm schreiben, ohne sich Gedanken über den zum Lesen von Daten erforderlichen Puffer machen zu müssen, was es zur einfachsten Codierungsmethode macht.

Was ist ein Kanal?

Das Wort Kanal wird auf viele verschiedene Arten verwendet.
Im Grunde scheint es sich um einen Übertragungsweg zur Ein- und Ausgabe von Daten zwischen anderen Geräten zu handeln.java.nio.channels.FileChannel ist eine Klasse, die eine Verbindung zum Lesen und Schreiben von Dateien darstellt.

transferTo Eine Methode kann Bytes von einer Quelldatei an einen Zielkanal übertragen.

Das Folgende wird aus dem JavaAPI-Dokument zitiert.

transferTo(Long-Position, Long-Zählung, WritableByteChannel-Ziel)
Überträgt Bytes aus der Datei dieses Kanals an den angegebenen Kanal mit beschreibbaren Bytes.
Diese Methode kann wesentlich effizienter sein als eine einfache Schleife, die Daten von diesem Kanal liest und in den Zielkanal schreibt. Viele Betriebssysteme können Bytes direkt vom Dateisystem-Cache an den Zielkanal übertragen. Zu diesem Zeitpunkt werden keine Bytes kopiert.

Dieses Überprüfungsergebnis zeigt, wie ein normaler Stream verwendet wird.
Der Kopiervorgang war schneller als bei anderen FileChannel-Methoden (z. B. bei Verwendung der ByteBuffer#allocateDirect-Methode).


Beispielprogramm

Ausführung

Um die Beispielprogrammdatei zu kopieren, haben wir eine 100 MB große Datei „100M.txt“ direkt unter dem Laufwerk C vorbereitet.
Im Beispielprogramm C:\100M.txt durch Kopieren C:\a.txt Erstellen Sie eine Datei.

Das Beispiel wurde in der folgenden Umgebung ausgeführt.
Betriebssystem: WindowsXP
CPU: Athlon 1,46 GHz
Speicher: 1 GB
JRE: 1.6.4

◆Ausführungsbeispiel

/** * Ausführungsbeispiel * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } Catch (IOException e) { e.printStackTrace(); } }

◆Ausführungsergebnisse


 FileChannel#transferTo Bei der Kopierverarbeitung mit der Methode
Das Kopieren einer 100-MB-Datei war in etwa 3 Sekunden abgeschlossen. Außerdem betrug die Heap-Nutzung während des Kopiervorgangs etwa 300 (KB).

Im Übrigen,Java-Datei kopieren (Puffergröße ändern)In der Methode eingeführt in
Als wir die effizienteste Puffergröße von 1000 KB angegeben haben, betrug die Verarbeitungszeit etwa 4 Sekunden und die Heap-Nutzung etwa 1.300 KB.

Sogar das Kopieren von Dateien per Stream kann durch Anpassen der Puffergröße beschleunigt werden
Man kann sagen, dass es beim Kopiervorgang einer einzelnen Datei keinen großen Unterschied gibt.
Wenn Sie jedoch große Dateien kontinuierlich kopieren oder mehrere Kopiervorgänge parallel ausführen, kann FileChannel hinsichtlich der Verarbeitungsgeschwindigkeit und der Heap-Nutzung effektiv sein.

  • URLをコピーしました!
Inhaltsverzeichnis