0
随着番石榴,散列可以是简单的有没有简单的方法从番石榴的HashCode中提取多个值?
但似乎只为你想要的是一个byte[]
(可能转换为十六进制字符串),或单int
或long
。但在一个地方,我需要两个long
s和在另一个我需要从sha1
五个int
。
我可以看到一些解决方案,如从new DataInputStream(new ByteArrayInputStream(byteHash))
读取,使用ByteBuffer
或手动从byte[]
进行转换。然而,他们都非常丑陋(例如吞下不可能的IOException
)和长期(也效率低下,但这并不影响我)。
那么是否有任何简单的方法从Guava的HashCode中提取多个(非字节)值?
我无法准确记得'ByteBuffer'如何被用于这样的事情,我发现的东西太糟糕了,但它确实非常简单。关于效率:我并不在乎,但对于'murmur3_32' 1.你创建一个ByteBuffer来通过'fromBytesNoCopy'将字节写入'HashCode'中。 2.你在'asBytes()'中为我克隆它们,3.我创建一个'ByteBuffer'来取回你开始的两个long。一个不必要的分配和两个不必要的转换,但是不是太糟糕,我想。 – maaartinus
唯一听起来像是关于这个问题的问题是'asBytes()'中的克隆,它可以通过一种新方法避免。但是我无法在'HashCode'上找到一个特别好的API来获取多个数字,就像你想要的那样。 – ColinD
我相信要记住一个转换花费相当长时间的基准(但那是很久以前或者只是我的幻想)。我想'asReadOnlyByteBuffer'就够了。实际上,'HashCode'只是一个不变的'byte []',也就是'ByteString',只是非常有限而且有一些怪癖('asLong' vs'padToLong')。 – maaartinus