【问题标题】:Java - Size of file vs size of InputStream byte array size differs by 4096Java - 文件大小与 InputStream 字节数组大小相差 4096
【发布时间】:2014-06-01 22:01:51
【问题描述】:

我正在尝试检查最初来自文件但超出我的代码范围的输入流的大小,并将其与磁盘上的实际文件进行比较,尝试检查两者是否相同。

当我将输入流转换为字节数组并获取长度时,结果正好比磁盘上的同一个文件少 4096。我想有一些标题占用了额外的 4096 字节。

有人能证实这个理论,并告诉我这是否总是如此吗?

这个问题主要是关于4096字节的差异以及它来自哪里,而不是关于如何比较文件。我还有其他检查,例如 md5 和其他检查,可以在该领域提供帮助。

谢谢

【问题讨论】:

  • 大小应该没有区别。但除非你向我们展示代码,否则我们只能猜测它发生了什么。顺便说一句-您认为某些标题会增加文件大小的理论是不正确的。
  • 你如何测量磁盘上的文件大小? FS 在 X 字节块上分配内存 - 比如说 16k。如果你的文件是 1 字节,它仍然会占用 16k 的磁盘空间。那么您是在测量实际文件大小还是它在磁盘上占用的大小?
  • 实际上,我使用的是 Mongo Grid FS,文件大小就是 Grid FS 所说的。它是数据的确切大小,而不是磁盘上的块存储。如果是块存储,我会通过查看数字注意到它。我现在拥有的文件大小以 ...33 结尾,所以不是 1024 的倍数。

标签: java inputstream filesize


【解决方案1】:

你用大小比较做什么?如果不检查内容,您也无法确定这两个文件是否相同,因此您可能应该将磁盘上的文件内容读入内存,然后您可以检查它们的大小。

【讨论】:

  • Attila - 1) 如果您正在测试两个大文件是否相等,那么首先比较它们的长度会告诉您是否需要费心阅读和比较两个文件。 2) 在比较之前将两个大文件读入内存是个坏主意。
  • 斯蒂芬 C 是对的。文件大小比较只是数据比较的 1 部分。我还在检查内容/mime 类型和 MD5 校验和。文件大小检查只是 100% 确定的最终检查。老实说,问题不在于谁来比较文件。我想知道 4096 字节的差异来自哪里。
猜你喜欢
  • 2022-08-19
  • 2012-07-20
  • 2020-06-04
  • 2017-04-22
  • 1970-01-01
  • 2013-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多