字符编码,占用空间大小

一、大小和空间占用

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也就是4
1024B=4096B)也就是4096/102=40行+8个汉字。

那么如果这时我们再往文件后面+一个1字节的数字,文件大小会变成多少呢?

答案是:8KB,因为一个4kB的箱子放不下了。
我们可以看到实际大小是4097字节,虽然就比4096字节多了一个字节,但是空间占用却直接多了4KB

换行的大小

我们在文件中只输入一个换行,然后查看其大小。

我们发现其占用了两个字节,意思是换行符占用两字节吗?是不完全是。
在linux和mac下,换行符是\n,但是在windows下,换行符是\r\n,
所以在上面显示两个字节其实是\r\n的占用,如果只有\n则只占用一个字节。

有了计划记得推动,不要原地踏步。
原文地址:https://www.cnblogs.com/amnotgcs/p/15632172.html