為什么文件占用的空間會大于文件實際大小以windows系統(tǒng)舉例,先看幾張圖: 圖1:文件的大小比占用空間更小。
圖2:文件的大小和占用空間大小一致。
圖3:文件大小比占用空間大小更大。
上面3張圖展示了文件大小與占用空間的大小幾種情況,前兩種場景是比較常見的情況,之所以有時文件大小會比占用空間小時因為簇大小的限制,簇代表了可以分配用來保存文件的最小磁盤空間量,存放sparse.txt文件所在區(qū)簇的大小為4096字節(jié),圖1中文件大小為4096字節(jié)(可以使用chkdsk命令查看),所以5K的文件需要2個簇來存儲,如下圖所示:
圖2所示文件大小為5M,5M正好是4096的整數倍,所以文件大小跟占用空間大小一樣大。 下面重點說下第三種情況,這里涉及到稀疏文件問題,對于不支持稀疏文件的系統(tǒng)就不會出現這種情況,看個例子: /**
* 常規(guī)文件可能會有很多不必要的空間浪費
* @throws IOException
*/
@Test
public void normalFile() throws IOException {
File file = new File("d:/tmp/sparse.txt");
Path path = file.toPath();
FileChannel ch = FileChannel.open(path, StandardOpenOption.CREATE,StandardOpenOption.WRITE);
ch.position(5*1024*1024L);
ch.write(ByteBuffer.wrap("hello world".getBytes("utf-8")));
ch.close();
}
/**
* 稀疏文件模式
* @throws IOException
*/
@Test
public void sparseFile() throws IOException {
File file = new File("d:/tmp/sparse.txt");
Path path = file.toPath();
FileChannel ch = FileChannel.open(path, StandardOpenOption.SPARSE,StandardOpenOption.CREATE_NEW,StandardOpenOption.WRITE);
ch.position(5*1024*1024L);
ch.write(ByteBuffer.wrap("hello world".getBytes("utf-8")));
ch.close();
}有的用戶會發(fā)現文件管理中統(tǒng)計的文件大小與實際空間占用大小不一致,如空間大小提示超標文件大小未超標,也是因為這些原因導致的,綜上所述,我司系統(tǒng)檢測到的空間占用大小為實際文件占用空間的大小,而非文件本身的大小,如提示空間超標,請您升級空間大小,避免影響您的正常使用。 如您的主機配額超標很多,實際占用空間不大,是因為有很多小的緩存文件,比如\runtime\session 路徑下的文件,如下圖:
這類情況如果通過FTP或文件管理器刪除太慢,請【提交工單】,可授權技術工程師為您批量刪除處理。
|
|||||
| >> 相關文章 | |||||
|
|
|||||