我正在寻找读取文件的最快方法 - 我不需要查看读取字节,我只需要完全读取文件,以便它进入操作系统文件缓存。
这就是我目前正在使用的(但它涉及为每个文件分配一个直接缓冲区)
FileInputStream f = new FileInputStream( file );
FileChannel ch = f.getChannel( );
ByteBuffer bb = ByteBuffer.allocateDirect((int)file.length() );
ch.read(bb);
答案 0 :(得分:2)
在Windows上使用/dev/null
或cat,
并\nul
将其复制到copy
。无需编写任何代码。
答案 1 :(得分:1)
考虑使用内存映射文件:http://docs.oracle.com/javase/7/docs/api/java/nio/MappedByteBuffer.html和http://www.codeproject.com/Tips/683614/10-Things-to-Know-about-Memory-Mapped-File-in-Java。在Unix上,你也可以在命令行中映射它们,不确定Windows。
答案 2 :(得分:-2)
感谢EJP建议,我创建了自己的/ dev / null文件通道:
RandomAccessFile racFile = new RandomAccessFile(file, "r");
FileChannel ch = racFile.getChannel( );
ch.transferTo(0, fileLength, new WritableByteChannel(){
@Override
public boolean isOpen() {
// TODO Auto-generated method stub
return true;
}
@Override
public void close() throws IOException {
// TODO Auto-generated method stub
}
@Override
public int write(ByteBuffer src) throws IOException {
// TODO Auto-generated method stub
int rem = src.remaining();
return rem;
}
}
);
racFile.close();
这为我的基准测试提供了最快的解决方案。