繁体   English   中英

哈希代码,用于比较Java和C#之间具有相同结构的对象

[英]Hash code for comparing objects with the same structure between Java and C#

我正在开发一个移动应用程序(用Java实现),该应用程序将数据与Web服务(用C#实现)同步。 我想检查从服务器接收(并保存到数据库)的对象与存储在服务器上的对象相比是否具有正确的数据。

我想出的解决方案是创建一个对象的哈希码,可以轻松地在移动应用程序和Web服务之间进行比较。

我正在考虑使用(在服务器端或在移动应用程序中)本机hashCode()方法,然后尝试以第二种语言中的一种语言重新实现其工作方式。 这是否可能,或者我必须重写两种语言中的hashCode()方法,以便给出相同的哈希码? 有没有更好的方法来验证数据完整性?

对象结构不是很复杂,尽管每个对象都有许多属性。

如果要对对象使用内置的哈希码方法,则需要在两侧都覆盖哈希函数。

建立自己的不依赖哈希码的助手可能是更干净的解决方案,因为整数哈希码的冲突率相对较高。 SHA256之类的东西会产生更长的哈希。

在.Net(包括用C#编写的代码)中,明确定义了GetHashCode,因为它不能保证在重新启动,应用程序域和CLR版本之间保持不变:

此外,.NET Framework不保证GetHashCode方法的默认实现,并且此方法返回的值在.NET Framework版本和平台(例如32位和64位平台)之间可能有所不同。

Java hashCode有类似的要求(我的重点):

在Java应用程序的执行过程中,只要在同一对象上多次调用它,则hashCode方法必须一致地返回相同的整数,前提是未修改该对象的equals比较中使用的信息。 从一个应用程序的执行到同一应用程序的另一执行,此整数不必保持一致。

您总是可以在服务器端使用DeepEqual之类的库来为您检查对象中每个属性的值。

我猜您想让您的移动Java应用程序在CPU上保持发光。 这样可以避免您在客户端上进行任何额外的工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM