Thomas Darimont
Erfahrenes Mitglied
Hallo,
schaut mal hier:
Für das kopieren von 2 gb brauch ich damit nur 33 s.
Gruß Tom
schaut mal hier:
Java:
/**
*
*/
package de.tutorials;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.nio.channels.ByteChannel;
import java.nio.channels.FileChannel;
import java.nio.channels.SocketChannel;
import java.nio.channels.WritableByteChannel;
/**
* @author Tom
*
*/
public class FastFileCopyExample {
/**
* @param args
*/
public static void main(String[] args) {
copy(file("D:/VMWare/40g xp development/xp-s005.vmdk"),
file("c:/temp/xp-s005.vmdk"));
}
private static File file(String path) {
return new File(path);
}
public static void copy(File source, File destination) {
try {
FileInputStream fileInputStream = new FileInputStream(source);
FileOutputStream fileOutputStream = new FileOutputStream(
destination);
FileChannel inputChannel = fileInputStream.getChannel();
FileChannel outputChannel = fileOutputStream.getChannel();
transfer(inputChannel, outputChannel, source.length(), 1024 * 1024 * 32 /* 32 MB */, true,true);
fileInputStream.close();
fileOutputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
public static void transfer(FileChannel fileChannel,
ByteChannel byteChannel, long lengthInBytes,
long chunckSizeInBytes, boolean verbose, boolean fromFile)
throws IOException {
long overallBytesTransfered = 0L;
long time = -System.currentTimeMillis();
while (overallBytesTransfered < lengthInBytes) {
long bytesTransfered = 0L;
if (fromFile) {
bytesTransfered = fileChannel.transferTo(0, Math.min(
chunckSizeInBytes, lengthInBytes
- overallBytesTransfered), byteChannel);
} else {
bytesTransfered = fileChannel.transferFrom(byteChannel,
overallBytesTransfered, Math.min(chunckSizeInBytes,
lengthInBytes - overallBytesTransfered));
}
overallBytesTransfered += bytesTransfered;
if (verbose) {
System.out.printf(
"overall bytes transfered: %s progress %s%%\n",
overallBytesTransfered, Math
.round(overallBytesTransfered
/ ((double) lengthInBytes) * 100.0));
}
}
time += System.currentTimeMillis();
if (verbose) {
System.out.printf("Transfered: %s bytes in: %s s -> %s kbytes/s",
overallBytesTransfered, time / 1000,
(overallBytesTransfered / 1024.0) / (time / 1000.0));
}
}
}
Code:
overall bytes transfered: 33554432 progress 2%
overall bytes transfered: 67108864 progress 3%
overall bytes transfered: 100663296 progress 5%
overall bytes transfered: 134217728 progress 6%
overall bytes transfered: 167772160 progress 8%
overall bytes transfered: 201326592 progress 9%
overall bytes transfered: 234881024 progress 11%
overall bytes transfered: 268435456 progress 13%
overall bytes transfered: 301989888 progress 14%
overall bytes transfered: 335544320 progress 16%
overall bytes transfered: 369098752 progress 17%
overall bytes transfered: 402653184 progress 19%
overall bytes transfered: 436207616 progress 20%
overall bytes transfered: 469762048 progress 22%
overall bytes transfered: 503316480 progress 23%
overall bytes transfered: 536870912 progress 25%
overall bytes transfered: 570425344 progress 27%
overall bytes transfered: 603979776 progress 28%
overall bytes transfered: 637534208 progress 30%
overall bytes transfered: 671088640 progress 31%
overall bytes transfered: 704643072 progress 33%
overall bytes transfered: 738197504 progress 34%
overall bytes transfered: 771751936 progress 36%
overall bytes transfered: 805306368 progress 38%
overall bytes transfered: 838860800 progress 39%
overall bytes transfered: 872415232 progress 41%
overall bytes transfered: 905969664 progress 42%
overall bytes transfered: 939524096 progress 44%
overall bytes transfered: 973078528 progress 45%
overall bytes transfered: 1006632960 progress 47%
overall bytes transfered: 1040187392 progress 49%
overall bytes transfered: 1073741824 progress 50%
overall bytes transfered: 1107296256 progress 52%
overall bytes transfered: 1140850688 progress 53%
overall bytes transfered: 1174405120 progress 55%
overall bytes transfered: 1207959552 progress 56%
overall bytes transfered: 1241513984 progress 58%
overall bytes transfered: 1275068416 progress 59%
overall bytes transfered: 1308622848 progress 61%
overall bytes transfered: 1342177280 progress 63%
overall bytes transfered: 1375731712 progress 64%
overall bytes transfered: 1409286144 progress 66%
overall bytes transfered: 1442840576 progress 67%
overall bytes transfered: 1476395008 progress 69%
overall bytes transfered: 1509949440 progress 70%
overall bytes transfered: 1543503872 progress 72%
overall bytes transfered: 1577058304 progress 74%
overall bytes transfered: 1610612736 progress 75%
overall bytes transfered: 1644167168 progress 77%
overall bytes transfered: 1677721600 progress 78%
overall bytes transfered: 1711276032 progress 80%
overall bytes transfered: 1744830464 progress 81%
overall bytes transfered: 1778384896 progress 83%
overall bytes transfered: 1811939328 progress 85%
overall bytes transfered: 1845493760 progress 86%
overall bytes transfered: 1879048192 progress 88%
overall bytes transfered: 1912602624 progress 89%
overall bytes transfered: 1946157056 progress 91%
overall bytes transfered: 1979711488 progress 92%
overall bytes transfered: 2013265920 progress 94%
overall bytes transfered: 2046820352 progress 96%
overall bytes transfered: 2080374784 progress 97%
overall bytes transfered: 2113929216 progress 99%
overall bytes transfered: 2143158272 progress 100%
Transfered: 2143158272 bytes in: 33 s -> 62548.280087265775 kbytes/s
Für das kopieren von 2 gb brauch ich damit nur 33 s.
Gruß Tom