2017-04-11 115 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)。 –