2017-04-11 127 views
1

整數表示也許這沒有什麼意義,但我需要的Firebase push id以同樣的方式整數表示爲[散列]我需要的火力地堡推ID

我想如果it's可能以與創建Hash相同的方式從Firebase push ID創建Java整數。 這是一個小實驗,但想看看它是否可以完成。

假設我擁有Firebase推送ID -Kh7JD01FqBpzfCt_dVX,並且我通過散列函數運行它我會每次執行相同的散列字符串。

但是,如果我可以運行-Kh7JD01FqBpzfCt_dVX通過一些「整數」功能,我會每次我這樣做,會得到相同的整數權

是啊,我知道我可以在2,147,483,647範圍內創建隨機整數和希望非碰撞。但我覺得這是不安全的,然後使用上述方法

+0

爲什麼不只是將每個字符從散列轉換爲八進制?根據散列長度的不同,您最終可能會得到一個大的數字字符串,但是您可以(通過其他方式)將它轉換爲範圍(0,MAX_INT) – Merlevede

回答

1

Firebase push IDs can hold 2^120 unique values。這是一個無法在整數中捕獲的範圍。

使用一個字符串的hashCode()保證給你相同的數字(每一個long)。但是哈希代碼不能保證對給定的輸入字符串是唯一的:有多個字符串會給出相同的散列代碼

+0

感謝您的信息,請稍等,Firebase ['runTransaction()'](https://firebase.google.com/docs/database/android/read-and-write)可以讓客戶端鎖定到一個鍵值並通過遞增1來獲得一個唯一的整數,然後使用它不會得到相同的Integer,因爲他首先也會增加。這感覺就像一個獨特的整數發生器工廠??。現在,也許我可以用Push ID來存儲Integer,它代表正確的。所以現在我已經創建了代表Push ID的整數? 但我只能創建2,147,483,647個。你怎麼看? –

+1

你似乎對如何實現這個邏輯有一些想法,所以:去做吧。如果您遇到問題,請分享[重現您卡住的最小代碼](http://stackoverflow.com/help/mcve)。 –