1

有没有办法通过“标准”Java(J2SE 5 或更高版本)可靠地“分配”(保留)硬盘空间?

以多线程应用程序为例,它在线程池中执行,每个线程都下载文件。应用程序如何确保其下载不会因磁盘空间耗尽而中断?

至少,如果它事先知道它正在下载的文件的大小,它是否可以进行某种“保留”,这将保证文件下载,而不管其他线程在做什么?

(在 StackOverflow 中有一个类似的问题,但它没有讨论多线程并且也使用 NIO。)

编辑:经过进一步测试,在类似问题上提出的解决方案似乎不起作用,因为无论底层硬盘空间如何,都可以通过建议的 RandomAccessFile 方法设置任何允许的长度。例如,在只有几 GB 可用的分区上,我可以随意创建 TB(太字节!)文件。

如果 File 类的 getFreeSpace() 方法在每次创建新文件时报告可用空间量减少,则该解决方案就足够了,但实际上并没有,因此确认了在实践中这些文件的零长度似乎有。

这些至少是我在 VMWare Player 4.0.0 中运行的 CentOS 5.6 虚拟机上看到的结果。

4

1 回答 1

1

将零写入文件。这将确保您已分配磁盘空间(除非正在使用驱动器压缩或文件的其他一些可变大小编码)。

您可能会为每个块写一个零,但确定块大小可能并非易事。

这是为了避免创建一个没有分配所有空间的稀疏文件。

于 2011-10-21T07:50:48.803 回答