用于比较Java和C之间具有相同结构的对象的哈希代码#
我正在开发一个移动应用程序(用Java实现),它用一个web服务(用C#实现)同步数据。我想检查从服务器接收(并保存到数据库)的对象与存储在服务器上的对象相比是否具有正确的数据 我提出的解决方案是创建一个对象的哈希代码,该代码可以很容易地在移动应用程序和web服务之间进行比较 我正在考虑(在服务器端或移动应用程序中)使用native用于比较Java和C之间具有相同结构的对象的哈希代码#,java,c#,android,object,data-integrity,Java,C#,Android,Object,Data Integrity,我正在开发一个移动应用程序(用Java实现),它用一个web服务(用C#实现)同步数据。我想检查从服务器接收(并保存到数据库)的对象与存储在服务器上的对象相比是否具有正确的数据 我提出的解决方案是创建一个对象的哈希代码,该代码可以很容易地在移动应用程序和web服务之间进行比较 我正在考虑(在服务器端或移动应用程序中)使用nativehashCode()方法,然后尝试用第二语言中的一种语言重新实现它的工作方式。这是可能的,还是我必须重写两种语言中的hashCode()方法,以便它提供相同的哈希代码
hashCode()
方法,然后尝试用第二语言中的一种语言重新实现它的工作方式。这是可能的,还是我必须重写两种语言中的hashCode()
方法,以便它提供相同的哈希代码?有没有更好的方法来验证数据完整性
对象结构不是很复杂,尽管每个对象都有许多属性。如果要为对象使用内置的哈希代码方法,则需要覆盖两侧的哈希函数 构建您自己的不依赖哈希代码的助手可能是更干净的解决方案,因为整数哈希代码的冲突率相对较高。像SHA256这样的东西会产生更长的散列 在.Net中(包括用C#编写的代码)被明确定义为不保证在重启、应用程序域和CLR版本之间保持不变: 。此外,.NET Framework不保证GetHashCode方法的默认实现,并且该方法返回的值在.NET Framework版本和平台(例如32位和64位平台)之间可能不同 Java也有类似的要求(我的重点): 在Java应用程序的执行过程中,每当在同一对象上多次调用hashCode方法时,只要没有修改对象上的equals比较中使用的信息,hashCode方法必须始终返回相同的整数。从应用程序的一次执行到同一应用程序的另一次执行,该整数不必保持一致
您可以始终在服务器端使用类似DeepEqual的库来检查对象中每个属性的值 我猜您希望在CPU上保持移动Java应用程序的轻量级。这将防止您在客户端上做任何额外的工作。Java中的“native”
hashCode()
只返回对象的内存位置。。。