如何使用java在磁盘上查找文件的最后一部分(大小小于文件系统的块大小)?

如何使用java在磁盘上查找文件的最后一部分(大小小于文件系统的块大小)?,java,filesystems,operating-system,hash,Java,Filesystems,Operating System,Hash,我正在做一个项目,我必须使用java查找存储在磁盘上的完整文件或部分文件。这就是我正在做的 1) 将参考文件分成若干部分(与文件系统的块大小相同),创建其哈希并保存在数据库中 2) 为了搜索该参考文件,我将磁盘分成若干部分(与文件系统的块大小相同),创建散列,然后查找散列的匹配 现在一切都很好,直到我到达文件的最后一部分,它很可能不等于文件系统的块大小。文件存储在磁盘上的情况也是如此,所以哈希值当然不匹配 那么,如何才能找到文件最后一部分的大小小于文件系统的块大小呢?您为什么关心物理块大小?在硬

我正在做一个项目,我必须使用java查找存储在磁盘上的完整文件或部分文件。这就是我正在做的

1) 将参考文件分成若干部分(与文件系统的块大小相同),创建其哈希并保存在数据库中
2) 为了搜索该参考文件,我将磁盘分成若干部分(与文件系统的块大小相同),创建散列,然后查找散列的匹配

现在一切都很好,直到我到达文件的最后一部分,它很可能不等于文件系统的块大小。文件存储在磁盘上的情况也是如此,所以哈希值当然不匹配


那么,如何才能找到文件最后一部分的大小小于文件系统的块大小呢?

您为什么关心物理块大小?在硬盘和操作系统之间,他们甚至无法确定是512字节还是4KB。现代SSD动态压缩数据,这是对块大小概念的嘲弄。如果只将文件划分为4KB块,而不考虑底层存储系统,那么您的算法仍然有效,因此只需硬编码即可。基本上,file.length()mod BLOCK_SIZE?基本上,我将文件划分为4KB块。但考虑到SSD不进行压缩,假设文件大小为102kb,则第26个块将有25个完整块,剩下2kB。所以现在,如果我创建最后一个块的散列,并将其与来自磁盘的任何4kb散列进行比较,它将不匹配。因此,我的问题是如何处理这个问题,并找到剩余的2kb。为什么要关心物理块的大小?在硬盘和操作系统之间,他们甚至无法确定是512字节还是4KB。现代SSD动态压缩数据,这是对块大小概念的嘲弄。如果只将文件划分为4KB块,而不考虑底层存储系统,那么您的算法仍然有效,因此只需硬编码即可。基本上,file.length()mod BLOCK_SIZE?基本上,我将文件划分为4KB块。但考虑到SSD不进行压缩,假设文件大小为102kb,则第26个块将有25个完整块,剩下2kB。所以现在,如果我创建最后一个块的散列,并将其与来自磁盘的任何4kb散列进行比较,它将不匹配。所以我的问题是如何处理这个问题,并找到剩下的2kb。