Java 具有不同名称和相同内容的文件的哈希函数
我有两个不同名称但内容相同的文件。当我创建这些文件的流并使用Java 具有不同名称和相同内容的文件的哈希函数,java,hash,Java,Hash,我有两个不同名称但内容相同的文件。当我创建这些文件的流并使用FileInputStream.HashCode()时方法查找哈希值,我收到不同的值 如果可能的话,是否有人能为Java中的哈希方法提供正确的API,该方法为具有相同内容的文件接收相同的哈希值。FileInputStream没有名为hashCode()的方法。它使用一般的方法 返回对象的哈希代码值。此方法在以下情况下受支持: HashMap提供的哈希表的好处 hashCode的总合同为: 每当在Java应用程序的执行过程中对同一对象多
FileInputStream.HashCode()时代码>方法查找哈希值,我收到不同的值
如果可能的话,是否有人能为Java中的哈希方法提供正确的API,该方法为具有相同内容的文件接收相同的哈希值。FileInputStream没有名为hashCode()的方法。它使用一般的方法
返回对象的哈希代码值。此方法在以下情况下受支持:
HashMap提供的哈希表的好处
hashCode的总合同为:
- 每当在Java应用程序的执行过程中对同一对象多次调用hashCode时,hashCode方法必须一致
如果在equals中未使用任何信息,则返回相同的整数
修改对象上的比较。这个整数不需要保留
从应用程序的一次执行到另一次执行的一致性
同样的应用
- 如果根据equals(Object)方法,两个对象相等,则必须对这两个对象中的每一个调用hashCode方法
生成相同的整数结果
- 根据equals(java.lang.Object)方法,如果两个对象不相等,则不需要调用hashCode方法
在两个对象中的每个对象上,必须生成不同的整数结果。
但是,程序员应该知道,生成不同的
不相等对象的整数结果可能会提高
哈希表李>
在合理可行的情况下,hashCode方法由
类对象确实为不同的对象返回不同的整数。(本
通常通过转换
对象转换为整数,但此实现技术不适用
JavaTM编程语言要求。)
FileInputStream.HashCode()
从Object
继承内部地址HashCode
。它不考虑内容。
另外,如果要比较两个文件是否相等,为什么要使用hashfunction?
由于冲突,2个不同的字符串可能具有相同的哈希代码。与文件内容相同
您可以使用FileUtils.contentEquals(file1,file2)代码>如果您可以使用第三方库(Commons IO)这听起来似乎可以满足您的需要
该库有一个用于创建加密哈希值(也称为消息摘要)的实用程序类,名为。例如,sha256
方法接受一个InputStream
,并将一个SHA-256消息摘要作为字节数组返回。我认为不存在这样的函数。为此,您必须读取两个文件的所有内容,这显然是一个昂贵的操作。您确定FileInputStream.HashCode()的实现对于相同内容上的两个输入流是相等的吗?请记住,这需要输入流一直读取到最后—这可能是不切实际的。除非文件名是哈希算法的一部分,为什么你读到最后都很重要呢?我的任务是创建一个哈希函数,为具有不同名称和相同内容的文件返回相同的值。编辑你的帖子解释:“我必须编写一个哈希函数。”(Stream…’。这会更清楚!是的,你是对的,但我认为我们彼此理解。谢谢!我的任务是使用哈希函数,问题是,我检查过的所有算法都会为相等的流返回不同的值。你是否尝试将内容加载到内存中,例如在字符串中
并比较String
?我不喜欢这个hashCode函数。如果你编译一个程序几次,这个函数对同一个文件所做的哈希有时是不同的。@诺兰:如果2String
具有相同的内容,它们必须具有相同的hashCode
。不确定你的意思是什么,我的意思是在文件上测试hashCode。当我获取文件时。jpg返回的hashCode值有时是不同的,hashCode并不总是相同的。第一次编译后的hash值是(比如)1234,第五次编译后的hash值是5123,用于具有相同名称、内容和所有其他内容的相同文件。我的意思是我不喜欢这个hashCode()函数,因为我不能100%确定如果我接受file2.jpg散列值是否相同。是的,就是这样!非常感谢。