Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/368.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 具有不同名称和相同内容的文件的哈希函数_Java_Hash - Fatal编程技术网

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函数。如果你编译一个程序几次,这个函数对同一个文件所做的哈希有时是不同的。@诺兰:如果2
String
具有相同的内容,它们必须具有相同的
hashCode
。不确定你的意思是什么,我的意思是在文件上测试hashCode。当我获取文件时。jpg返回的hashCode值有时是不同的,hashCode并不总是相同的。第一次编译后的hash值是(比如)1234,第五次编译后的hash值是5123,用于具有相同名称、内容和所有其他内容的相同文件。我的意思是我不喜欢这个hashCode()函数,因为我不能100%确定如果我接受file2.jpg散列值是否相同。是的,就是这样!非常感谢。