有没有办法通过“标准”Java(J2SE 5 或更高版本)可靠地“分配”(保留)硬盘空间?
以多线程应用程序为例,它在线程池中执行,每个线程都下载文件。应用程序如何确保其下载不会因磁盘空间耗尽而中断?
至少,如果它事先知道它正在下载的文件的大小,它是否可以进行某种“保留”,这将保证文件下载,而不管其他线程在做什么?
(在 StackOverflow 中有一个类似的问题,但它没有讨论多线程并且也使用 NIO。)
编辑:经过进一步测试,在类似问题上提出的解决方案似乎不起作用,因为无论底层硬盘空间如何,都可以通过建议的 RandomAccessFile 方法设置任何允许的长度。例如,在只有几 GB 可用的分区上,我可以随意创建 TB(太字节!)文件。
如果 File 类的 getFreeSpace() 方法在每次创建新文件时报告可用空间量减少,则该解决方案就足够了,但实际上并没有,因此确认了在实践中这些文件的零长度似乎有。
这些至少是我在 VMWare Player 4.0.0 中运行的 CentOS 5.6 虚拟机上看到的结果。