Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使用带有byte[]键的guava缓存?_Java_Caching_Guava - Fatal编程技术网

Java 如何使用带有byte[]键的guava缓存?

Java 如何使用带有byte[]键的guava缓存?,java,caching,guava,Java,Caching,Guava,我创建了番石榴缓存: Cache<byte[], byte[]> = CacheBuilder.newBuilder() .maximumSize(1_000_000) .expireAfterAccess(20, TimeUnit.MINUTES) .build();use Cache=CacheBuilder.newBuilder() .最大尺寸(1_000_000) .expireAfterAccess

我创建了番石榴缓存:

Cache<byte[], byte[]>  = CacheBuilder.newBuilder()
            .maximumSize(1_000_000)
            .expireAfterAccess(20, TimeUnit.MINUTES)
            .build();use
Cache=CacheBuilder.newBuilder()
.最大尺寸(1_000_000)
.expireAfterAccess(20,时间单位:分钟)
.build();使用
但是当我调用get()时,它找不到键。当我需要使用array.equals()时,实现似乎使用equals()来查找键

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


任何帮助都将不胜感激。

如果自然相等是您唯一的解决方案(如在
HashMap
中),只需将您的实例包装在一个执行此任务的对象中即可!JVM可以很好地处理非常短的活动对象,所以不要为缓存查询而创建一些小对象


正如@LouisWasserman提到的,您可以使用。你应该注意不要修改由缓存键支持的数组。

我有点好奇为什么你要用字节数组作为另一个字节数组的键…简短回答:不,你必须用
equals
hashCode
的正确实现将
字节[]
包装到另一个对象中。(如果我没记错的话,
ByteBuffer
将在这里工作,并内置到Java中。)@LouisWasserman为缓存添加
KeyEquality
风格的评估策略会有什么好处吗?@SotiriosDelimanolis我认为这是经过考虑并被拒绝的。通过跟踪了解详细信息。@LouisWasserman用户认为他们需要的比实际需要的多,谢谢
BigInteger
将具有不同前导零数的任何数组合并
ByteBuffer
就可以了。你不能建议编辑我的答案吗?这是你应得的;当然,我可以将字节[]包装到一个对象中,但缓存位于基于磁盘的键值存储前面,因此将有数百万个额外对象,而不是少数。看起来这是唯一的选择。(遗憾的是,在如此多的库中,数组是事后才想到的)在您真正遇到性能问题之前,我不会担心数以百万计的对象。