.txt文件的磁盘大小和大小

时间:2014-09-08 06:52:06

标签: java string bit filesize

在记事本中打开一个新文件并插入没有引号的句子,"四分和七年前"在里面。

Four              4 characters
score             5 characters
and               3 characters
seven             5 characters 
years             5 characters 
ago               3 characters

TOTAL:25 + 5个空格= 30个字符。

您会发现该文件在磁盘上的大小为30个字节:每个字符为1个字节。 以getSize.txt名称将文件保存到磁盘。 然后查看文件的大小。 通常,每个字符都占用一个字节。

尺寸:30字节
磁盘大小:4.00 KB(4,096字节)

以下段落是从pdf中复制粘贴的。

如果您在计算机查看文件时查看该文件,您会发现每个字节不包含字母而是数字 - 数字是与该字符对应的ASCII代码(见下文)。所以在磁盘上,文件的数字如下所示:

F o u r d n s s v n n

70 111 117 114 32 97 110 100 32 115 101 118 101 110

通过查看ASCII表,您可以看到每个字符与使用的ASCII代码之间的一对一对应关系。注意32用于空格--32是空格的ASCII码。如果我们想要技术上正确的话,我们可以将这些十进制数扩展为二进制数(所以32 = 00100000) - 这就是计算机真正处理事物的方式。

1)我知道每件事都以比特和字节的形式存储,所以通常这意味着 - "你会发现每个字节不包含字母而是数字 - 数字是ASCII代码对应于字符"。一个字节是8位。那么"每个字节是一个数字 - 数字是ASCII码"。一个字节如何包含除0和1之外的ASCII数字(例如49为' 1')?

2)磁盘上的大小和大小有什么区别? ASCII和Unicode如何适应它?

3)在Java中,字符串是对象。我可以说这是一个多个字符连在一起吗? String str ="四分和七年前" 那么str如何存储在内存中。它与保存在记事本文件中的方式相同吗?

3 个答案:

答案 0 :(得分:5)

文件以块的形式存储。如果文件大小小于块大小(在您的情况下,4KB),该文件将占用所有块,但其大部分空间未使用。我认为这个问题在SuperUser上得到了解答,我会找到这个链接。 更新:https://superuser.com/questions/704218/why-is-there-such-a-big-difference-between-size-and-size-on-disk

enter image description here

答案 1 :(得分:3)

简而言之:

  1. "一个字节如何包含一个除了0和1之外的ASCII码(例如,49为' 1')?

      

    字节是8位。因此,您可以在其中存储0到255之间的数字。

  2. 磁盘上的文件大小和大小有什么区别:

      

    MJafar Mash's answer:"尺寸"是以字节为单位的实际大小,"磁盘上的大小"是您需要分配为要放入文件的块的字节数。

  3. 在Java字符串中是对象。我可以说String是多个连接在一起的字符吗?

      

    是的,但实际上比这更复杂:
      取自this answer

    初始化一个新创建的String对象,使其表示与参数相同的字符序列;换句话说,新创建的字符串是参数字符串的副本。除非需要显式的原始副本,否则不必使用此构造函数,因为字符串是不可变的。

答案 2 :(得分:0)

1)我知道每件事都以比特和字节的形式存储,所以通常这意味着 - “你会发现每个字节不包含字母而是数字 - 数字是ASCII代码对应于字符“。一个字节是8位。那么“每个字节一个数字 - 数字是ASCII代码”怎么样?一个字节如何包含除0和1之外的ASCII数字(例如,49为'1')?

每个ASCII字符占用1个字节。在内部,每个字符都存储为其ASCII编号。因此,您可以存储8位数据最大值,即2 ^ 8 -1 = 255.因此范围将为0-255。

2)磁盘上的大小和大小有什么区别? ASCII和Unicode如何适应它?

每个ASCII字符为1个字节。因此,30个字节是文件中数据的实际大小。接下来,4KB是存储文件的段/块的大小。在您的情况下,它是给予磁盘上任何文件的最小“新”空间。

3)在Java中,字符串是对象。我可以说这是一个多个字符连在一起吗? String str =“四分和七年前”那么str如何存储在内存中。它与保存在记事本文件中的方式相同吗?

是。字符串确实(内部)连接在一起的多个字符。但是字符不能被改变。字符串是一个对象,因此,它们被存储为一个字符数组(在java中每个字符是2个字节)。 Java使用UTF-8(基于各种因素可能会有所不同)作为默认的Charset。你也可以改变它。