簡體   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