如果文件未完全在最后一个字节结束怎么办?

时间:2019-06-24 19:59:32

标签: java file

例如,如果一个文件为100位,则将其存储为13个字节,这意味着最后一个字节的前4位是文件,而后4个不是文件(无用数据)。

那么当使用Java中的FileInputStream.read()函数或其他编程语言中的类似函数读取文件时,如何防止这种情况发生?

2 个答案:

答案 0 :(得分:4)

您会注意到,如果您曾经使用汇编语言,则无法实际读取特定位。存储器的最小可寻址位是一个字节,存储器地址是指存储器中的特定字节。如果要使用特定的位,则要使用它,就必须使用| & ^之类的按位函数。因此,在这种情况下,如果以二进制形式存储100位,则实际上至少要存储13个字节,并且几位默认为0,因此结果相同。

答案 1 :(得分:0)

当前的文件系统主要存储的文件是整数个字节,因此不会出现此问题。您不能写正好100位长的文件。原因很简单:文件元数据保存的是字节长度而不是位长度。

这是文件系统设计人员有意识的设计选择。考虑到他们几乎不需要任何长度为任意位数的文件,因此他们大概选择了设计方式。

那些确实需要文件包含非整数字节的情况可以(并且需要)自行安排。也许在100位的情况下,可以插入一个标头,该标头实际上表示在随后的13个字节中只有前100位具有有用的数据。当然,这需要在应用程序或某些处理此类文件数据的库中进行特殊处理。


由于布尔值的大小等原因,无法进行有关位长文件的评论,在我看来似乎没有提到这一点。当然,磁盘存储的粒度不是问题:我们可以在只能处理256字节单位的设备上存储“ 100字节”文件-文件系统需要注意的是文件大小为100,而不是256,即使为该文件分配了256个字节。如果有用,它也可以很好地跟踪大小为100位。并且,当然,我们需要以位表示传输长度的I / O系统调用。但这并不难。内存中的缓冲区需要稍大一些,因为语言和操作系统都没有以任意位长分配RAM,但这与文件大小没有紧密联系。