使用Guava,哈希可以像
一样简单byte[] byteHash = Hashing.md5().hashBytes(aByteArray).asBytes();
但似乎只有你想要的只是byte[]
(可能转换为十六进制字符串),或一个int
或long
。但是在一个地方我需要两个long
s而在另一个地方我需要来自int
的五个sha1
。
我可以看到一些解决方案,例如从new DataInputStream(new ByteArrayInputStream(byteHash))
阅读,使用ByteBuffer
或从byte[]
手动转换。然而,所有这些都非常难看(例如,吞下一个不可能的IOException
)和长期(也是低效的,但这并不会让我感到困扰)。
那么有没有简单的方法从Guava的HashCode中提取多个(非字节)值?
答案 0 :(得分:1)
HashCode
没有内置任何内容,没有。
使用ByteBuffer
做你需要的东西似乎很容易,既不长也不特别低效:
ByteBuffer buf = ByteBuffer.wrap(byteHash);
long l1 = buf.getLong();
long l2 = buf.getLong();
(我认为asReadOnlyByteBuffer()
方法可以避免克隆字节数组的需要,但我不知道这是否真的有必要。)