Menyalin file Java (mudah dan cepat)FileChannel#transferTo
Di JavaSalin berkasBerikut adalah contoh program yang mendemonstrasikan hal ini.
Program contoh ini menggunakan New I/O, yang diperkenalkan pada J2SE 1.4. java.nio.channels.FileChannel#transferTo Kita akan menggunakan metode tersebut.
Hal ini memungkinkan Anda untuk menulis program penyalinan tanpa perlu khawatir tentang buffer yang dibutuhkan untuk membaca data, sehingga menghasilkan pengkodean yang sesederhana mungkin.
Apa itu saluran?
Kata "saluran" digunakan dalam berbagai cara,
Pada dasarnya, ini tampaknya merujuk pada jalur transmisi untuk memasukkan dan mengeluarkan data antara perangkat yang berbeda.java.nio.channels.FileChannel Kelas ini mewakili koneksi untuk membaca dan menulis ke file.
transferKe Metode ini dapat mentransfer data byte dari file sumber ke saluran tujuan.
Berikut ini adalah kutipan dari dokumentasi API Java.
transferTo(long position, long count, WritableByteChannel target)
Perintah ini mentransfer byte dari file pada saluran ini ke saluran byte yang dapat ditulis yang ditentukan.
Metode ini berpotensi jauh lebih efisien daripada perulangan sederhana yang membaca data dari saluran ini dan menuliskannya ke saluran target. Banyak sistem operasi dapat mentransfer byte langsung dari cache sistem file ke saluran target tanpa menyalin byte tersebut.
Hasil verifikasi ini menunjukkan bahwa menggunakan aliran reguler adalah salah satu metodenya,
Metode ini memungkinkan penyalinan yang lebih cepat daripada metode lain yang menggunakan FileChannel (seperti menggunakan metode ByteBuffer#allocateDirect).
Contoh program
Saluran Berkas srcChannel = baru
FileInputStream(srcPath).getChannel();
Saluran Berkas Saluran tujuan = baru
FileOutputStream(destPath).getChannel();
mencoba {
srcChannel.transferTo(0, srcChannel.size(), destChannel);
} Akhirnya {
srcChannel.close();
destChannel.close();
}
}
eksekusi
Untuk menyalin file program contoh, saya menyiapkan file berukuran 100MB bernama "100M.txt" langsung di drive C.
Dalam program contoh... C:\100M.txt Menyalin C:\a.txt Buat file berikut.
Sampel tersebut dijalankan dalam lingkungan berikut.
Sistem Operasi: Windows XP
CPU: Athlon 1.46GHz
Memori: 1GB
JRE: 1.6.4
◆Contoh
/** * Contoh eksekusi * @param args */ public static void main(String[] args) { try { copyTransfer("C:\\100M.txt", "C:\\a.txt"); } catch (IOException e) { e.printStackTrace(); } }
FileChannel#transferTo Dalam operasi penyalinan menggunakan metode
Proses penyalinan file berukuran 100MB selesai dalam waktu sekitar 3 detik. Penggunaan memori heap selama proses penyalinan juga sekitar 300 KB.
Omong-omong,Salin file Java (ubah ukuran buffer)Metode yang dijelaskan di sana,
Saat menentukan ukuran buffer paling efisien sebesar 1000KB, waktu pemrosesannya sekitar 4 detik, dan penggunaan heap sekitar 1.300KB.
Bahkan dengan penyalinan file berbasis aliran data, prosesnya dapat dipercepat dengan menyesuaikan ukuran buffer.
Untuk proses menyalin satu file, tidak ada banyak perbedaan antara kedua metode tersebut.
Namun, ketika menyalin file berukuran besar secara berurutan atau menjalankan beberapa operasi penyalinan secara paralel, FileChannel dapat efektif dalam hal kecepatan pemrosesan dan penggunaan memori heap.

