有没有简单的方法从Guava的HashCode中提取多个值?

时间:2014-07-17 19:08:41

标签: guava hashcode

使用Guava,哈希可以像

一样简单
byte[] byteHash = Hashing.md5().hashBytes(aByteArray).asBytes();

但似乎只有你想要的只是byte[](可能转换为十六进制字符串),或一个intlong。但是在一个地方我需要两个long s而在另一个地方我需要来自int的五个sha1

我可以看到一些解决方案,例如从new DataInputStream(new ByteArrayInputStream(byteHash))阅读,使用ByteBuffer或从byte[]手动转换。然而,所有这些都非常难看(例如,吞下一个不可能的IOException)和长期(也是低效的,但这并不会让我感到困扰)。

那么有没有简单的方法从Guava的HashCode中提取多个(非字节)值?

1 个答案:

答案 0 :(得分:1)

HashCode没有内置任何内容,没有。

使用ByteBuffer做你需要的东西似乎很容易,既不长也不特别低效:

ByteBuffer buf = ByteBuffer.wrap(byteHash);
long l1 = buf.getLong();
long l2 = buf.getLong();

(我认为asReadOnlyByteBuffer()方法可以避免克隆字节数组的需要,但我不知道这是否真的有必要。)