Вы можете попробовать использовать объект 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 затем может использоваться для чтения/записи в файл. Убедитесь, что в целевой файловой системе достаточно свободного места. Пространство не может быть «эксклюзивным» для каждого, но вы всегда можете использовать File Locks для этого.
P.S: Если вы в конечном итоге осознаете, что жесткие диски медленны и бесполезны (или предназначены для использования ОЗУ с самого начала), вы можете использовать объект ByteBuffer из java.nio. Методов allocate() и allocateDirect() должно быть более чем достаточно. Байт-буфер будет выделен в ОЗУ (и возможный SwapFile) и будет эксклюзивным для этой Java-программы. Случайный доступ может быть выполнен путем изменения положения буфера. Поскольку эти буферы используют знаковые целые числа для ссылки, максимальные размеры ограничены 2^31 - 1.
Подробнее о RandomAccessFile here.
Подробнее о FileLock (объект java) here.
Подробнее о ByteBuffer here.
Wnat Вы имеете в виду с предварительным размещением? Чтобы убедиться, что имеется определенное пространство пространства или доступны определенные адреса? – Jocke
Я хочу зарезервировать N GB для моего приложения, чтобы там не было другого приложения или ОС.Я думаю, что предварительное выделение достаточно большого файла будет работать, но я надеюсь, что есть более эффективные подходы, такие как DB/VFS. – Tosha