熟悉电驴和bt的你可能经常看到这些软件可以在下载文件之初就先在硬盘上建立了一个将要下载的那个文件,但其实里面的内容是空的,只是预先申请了磁盘空间,这样做的好处是可以尽可能的减少磁盘碎片,同时可以保证不会在写文件的时候因为磁盘空间不足而出错。
用java也是可以实现这样的,今天偶然在网上看到了这种方法,跟大家分享一下。
import java.io.RandomAccessFile;
import java.nio.MappedByteBuffer;
import java.nio.channels.FileChannel;
public class Test {
static int length = 0xFFFFFFF;
public static void main(String[] args) throws Exception {
MappedByteBuffer out = new RandomAccessFile("E:/test.dat", "rw").getChannel().map(FileChannel.MapMode.READ_WRITE,
0, length);
for (int i = 0; i < length; i++)
out.put((byte) 'x');
System.out.println("Finished writing!");
}
}