一、大小和空間占用
1.1 空文本文檔
我們新建一個空文本文檔,發現其字節占用為0。
其實並不是真的占用為空,而是你創建文檔的時候,系統為該文件分配了一個一定大小的索引空間用來保存文件元信息。
甚至有的時候,你往文件里面寫了少量的內容,大小不為0,但空間大小依然為0,這是因為數據較少存在了索引空間中。
(但是當你存儲了超過一定量數據並保存時,即使后續你將文件清空並只寫入1字節數據,該文件空間占用也為一個單元大小,比如4KB)
1.2 大小和空間占用不相等
我們往文件里面寫入10個數字,再看其大小和空間占用。
發現一個數字占用了一個字節,而空間占用卻是4kb,這是因為磁盤分區格式化時選擇的單元大小是4kb,
也就是說,小於等於4kb的東西存在磁盤上,雖然文件大小不到4kb,但是空間占用會是4kb,
4kb多一點的文件存在磁盤上會占用8kb,磁盤占用只能是4kb的整數倍,
就像磁盤上分了很多小箱子一樣,不到一個箱子的東西放進去也會占用一個箱子的使用權。
大小和字符集編碼的關系
我們在文檔里面寫入十個漢字,文檔使用UTF-8編碼保存,然后查看文檔大小。
我們發現其大小占用了30字節,由此我們得知UTF-8存儲每個漢字時使用三字節,查詢文檔后發現確是如此。
而GB2313或GBK則是使用了兩個字節來存儲中文(字母等使用1個字節,與ascii兼容,詳細內容參見:C語言:GB2312編碼和GBK編碼,將中文存儲到計算機
)。
所以我們將該文件編碼改為gb2312或gbk后文件大小會減少對不對?對的。
比單元大小多一點點的文件占用大小
我們知道GBK下漢字占用2個字節,windows環境下\r\n換行占用2個字節,
NTFS文件格式默認單元大小為4KB,
如果我們構造一個文件大小4KB的文件,需要輸入多少漢字和換行呢?
我們假設一行輸入50個漢字然后換行,也就是一行502+2=102個字節,
那么4KB(4KB其實說的是4KiB也就是41024B=4096B)也就是4096/102=40行+8個漢字。
那么如果這時我們再往文件后面+一個1字節的數字,文件大小會變成多少呢?
答案是:8KB,因為一個4kB的箱子放不下了。
我們可以看到實際大小是4097字節,雖然就比4096字節多了一個字節,但是空間占用卻直接多了4KB
換行的大小
我們在文件中只輸入一個換行,然后查看其大小。
我們發現其占用了兩個字節,意思是換行符占用兩字節嗎?是不完全是。
在linux和mac下,換行符是\n,但是在windows下,換行符是\r\n,
所以在上面顯示兩個字節其實是\r\n的占用,如果只有\n則只占用一個字節。