我如何使用带有 byte[] 键的番石榴缓存?

How can i use guava cache with a byte[] key?

我创建了一个番石榴缓存:

Cache<byte[], byte[]>  = CacheBuilder.newBuilder()
            .maximumSize(1_000_000)
            .expireAfterAccess(20, TimeUnit.MINUTES)
            .build();use

但是当我调用 get() 时它没有找到密钥。该实现似乎使用 equals() 来查找密钥,当我需要它时使用 Arrays.equals().

有没有办法设置缓存使其以这种方式工作?在内部,它似乎具有灵活性,因为比较使用 Equivalence 而不是直接的 equals(),但是 CacheBuilder api 似乎没有办法设置 Equivalence 对象。

如有任何帮助,我们将不胜感激。

如果自然平等是您的独特解决方案(例如 HashMap),只需将您的实例包装在一个完成这项工作的对象中! JVM 可以很好地处理非常短的生存对象,所以不要因为创建一些小对象只是为了缓存查询而烦恼。

如@LouisWasserman 所述,您可以使用 ByteBuffer。您应该如何注意不要修改缓存键支持的数组。