java – 为文件存储预分配驱动器空间

前端之家收集整理的这篇文章主要介绍了java – 为文件存储预分配驱动器空间前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

是否有Java方法为应用程序中的独占使用预先分配驱动器空间?

不要求此空间是单独的文件系统或现有文件系统的一部分(因此很容易成为数据库),但它应该允许保留指定的空间量并允许随机读取/写入具有足够高的吞吐量.

最佳答案
您可以尝试使用RandomAccessFile对象并使用setLength()方法.

例:

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的更多信息.

阅读FileLock(java对象)here的更多内容.

阅读更多关于ByteBuffer here的信息.

猜你在找的Java相关文章