是否有Java方法为应用程序中的独占使用预先分配驱动器空间?
不要求此空间是单独的文件系统或现有文件系统的一部分(因此很容易成为数据库),但它应该允许保留指定的空间量并允许随机读取/写入具有足够高的吞吐量.
最佳答案
您可以尝试使用RandomAccessFile对象并使用setLength()方法.
原文链接:https://www.f2er.com/java/438294.html例:
File file = ... //Create a temporary file on the filesystem your trying to reserve.
long bytes = ... //number of bytes you want to reserve.
RandomAccessFile rf = null;
try{
rf = new RandomAccessFile(file,"rw"); //rw stands for open in read/write mode.
rf.setLength(bytes); //This will cause java to "reserve" memory for your application by inflating/truncating the file to the specific size.
//Do whatever you want with the space here...
}catch(IOException ex){
//Handle this...
}finally{
if(rf != null){
try{
rf.close(); //Lets be nice and tidy here.
}catch(IOException ioex){
//Handle this if you want...
}
}
}
注意:在创建RandomAccessFile对象之前,该文件必须存在.
然后可以使用RandomAccessFile对象读取/写入文件.确保目标文件系统有足够的可用空间.空间可能不是“独占”,但您可以随时使用文件锁来执行此操作.
P.S:如果您最终意识到硬盘驱动器速度慢且无用(或者从一开始就意味着使用RAM),您可以使用java.nio中的ByteBuffer对象. allocate()和allocateDirect()方法应该足够了.字节缓冲区将被分配到RAM(和可能的SwapFile)中,并且将独占于此java程序.可以通过改变缓冲区的位置来进行随机访问.由于这些缓冲区使用有符号整数来引用位置,因此最大大小限制为2 ^ 31 – 1.
阅读RandomAccessFile here的更多信息.
阅读更多关于ByteBuffer here的信息.