- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我是编年史 map 的新手。我正在尝试使用 chronicle-map 对堆外映射进行建模,其中键是原始短数组,值是原始长数组。对于给定的 map ,长数组值的最大大小是已知的。但是,我将有多个此类映射,每个映射的长数组值可能具有不同的最大大小。我的问题与键和值的序列化/反序列化有关。
通过阅读文档,我了解到对于键,我可以使用值类型 ShortValue 并重用该接口(interface)的实现实例。关于值(value),我找到了谈论 DataAccess and SizedReader 的页面它给出了 byte[] 的示例,但我不确定如何将其适应 long[]。我的另一个要求是,我需要在长数组中的任意索引处获取和设置值,而无需支付每次对整个值进行完整序列化/反序列化的成本。
所以我的问题是:如果每个 map 的最大大小已知并且我需要能够读取,我如何在构建 map 时对值类型建模以及 long[] 数组需要什么序列化/反序列化代码并在每次不序列化/反序列化整个值负载的情况下编写随机索引?理想情况下,long[] 将直接在堆外进行编码/解码,而无需进行到 byte[] 的堆内中间转换,并且 chronicle-map 代码不会在运行时分配。谢谢。
最佳答案
首先,我建议使用某种LongList
接口(interface)抽象而不是long[]
,这样可以更轻松地处理大小可变性,提供替代的享元实现等
如果你只想读/写大列表中的单个元素,你应该使用 advanced contexts API :
/** This method is entirely garbage-free, deserialization-free, and thread-safe. */
void putOneValue(ChronicleMap<ShortValue, LongList> map, ShortValue key, int index,
long element) {
if (index < 0) throw throw new IndexOutOfBoundsException(...);
try (ExternalMapQueryContext<ShortValue, LongList, ?> c = map.getContext(key)) {
c.writeLock().lock(); // (1)
MapEntry<ShortValue, LongList> entry = c.entry();
if (entry != null) {
Data<LongList> value = entry.value();
BytesStore valueBytes = (BytesStore) value.bytes(); // (2)
long valueBytesOffset = value.offset();
long valueBytesSize = value.size();
int valueListSize = (int) (valueBytesSize / Long.BYTES); // (3)
if (index >= valueListSize) throw new IndexOutOfBoundsException(...);
valueBytes.writeLong(valueBytesOffset + ((long) index) * Long.BYTES,
element);
((ChecksumEntry) entry).updateChecksum(); // (4)
} else {
// there is no entry for the given key
throw ...
}
}
}
注意事项:
writeLock()
,否则当您调用 context.entry()
方法时,readLock() 将自动获取,并且您以后将无法将读锁升级为写锁。请阅读HashQueryContext
javadoc仔细。Data.bytes()
正式返回 RandomDataInput
,但您可以确定(它在 Data.bytes()
javadoc 中指定)它实际上是 BytesStore
的一个实例(这是 RandomDataInput
和 RandomDataOutput
的组合)。SizedReader
和 SizedWriter
(或 DataAccess
)。请注意,使用了“字节/元素联合大小”技术,与 SizedReader
and SizedWriter
doc section 中给出的示例相同, PointListSizeMarshaller
.您可以将您的 LongListMarshaller
基于该示例类。ChecksumEntry
javadoc和 the section about checksums in the doc .如果您有一个纯内存(非持久化)Chronicle Map,或者关闭了校验和,则可以省略此调用。单元素读取的实现类似。
关于java - 如何使用 Chronicle Map 在随机索引上使用 get/set 序列化/反序列化 long[] 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48650938/
我是 python 的新手。我试图找到我的文本的频率分布。这是代码, import nltk nltk.download() import os os.getcwd() text_file=open(
我对安卓 fragment 感到困惑。我知道内存 fragment 但无法理解什么是 android fragment 问题。虽然我发现很多定义,比如 Android fragmentation re
尝试对 WordPress 进行 dockerise 我发现了这个场景: 2个数据卷容器,一个用于数据库(bbdd),另一个用于wordpress文件(wordpress): sudo docker
这个问题已经有答案了: From the server is there a way to know that my page is being loaded in an Iframe (1 个回答)
我正在玩小型服务器,试图对运行在其上的服务进行docker化。为简化起见,假设我必须主要处理:Wordpress和另一项服务。 在Docker集线器上有许多用于Wordpress的图像,但是它们似乎都
我想要发生的是,当帐户成功创建后,提交的表单应该消失,并且应该出现一条消息(取决于注册的状态)。 如果成功,他们应该会看到一个简单的“谢谢。请检查您的电子邮件。” 如果不是,那么他们应该会看到一条适当
就是这样,我需要为客户添加一个唯一标识符。通过 strip 元数据。这就是我现在完全构建它的方式,但是我只有最后一部分告诉我用户购买了哪个包。 我试着看这里: Plans to stripe 代码在这
我有一个类将执行一些复杂的操作,涉及像这样的一些计算: public class ComplexAction { public void someAction(String parameter
这个问题已经有答案了: maven add a local classes directory to module's classpath (1 个回答) 已关闭10 年前。 我有一些不应更改的旧 E
我使用 fragment 已经有一段时间了,但我经常遇到一个让我烦恼的问题。 fragment 有时会相互吸引。现在,我设法为此隔离了一个用例,它是这样的: Add fragment A(也使用 ad
我的 html 中有一个 ol 列表,上面有行条纹。看起来行条纹是从数字后面开始的。有没有办法让行条纹从数字开始? 我已经包含了正在发生的事情的片段 h4:nth-child(even) {
如何仅使用 css 将附加图像 html 化? 如果用纯 css 做不到,那我怎么能至少用一个图像来做 最佳答案 这不是真正的问题,而是您希望我们为您编写代码。我建议您搜索“css breadcrum
以下是 Joshua 的 Effective Java 的摘录: If you do synchronize your class internally, you can use various te
在这里工作时,我们有一个框向业务合作伙伴提供 XML 提要。对我们的提要的请求是通过指定查询字符串参数和值来定制的。其中一些参数是必需的,但很多不是。 例如,我们要求所有请求都指定一个 GUID 来标
我有 3 个缓冲区,其中包含在 32 位处理器上运行的 R、G、B 位数据。 我需要按以下方式组合三个字节: R[0] = 0b r1r2r3r4r5r6r7r8 G[0] = 0b g1g2g3g4
我最近发现了关于如何使用 History.js、jQuery 和 ScrollTo 通过 HTML5 History API 对网站进行 Ajax 化的要点:https://github.com/br
我们有一个 Spring Boot 应用程序,由于集成需要,它变得越来越复杂——比如在你这样做之后发送一封电子邮件,或者在你之后广播一条 jms 消息等等。在寻找一些更高级别的抽象时,我遇到了 apa
我正在尝试首次实施Google Pay。我面临如何指定gateway和gatewayMarchantId的挑战。 我所拥有的是google console帐户,不知道在哪里可以找到此信息。 priva
昨天下午 3 点左右,我为两个想要从一个 Azure 帐户转移到另一个帐户的网站设置了 awverify 记录。到当天结束时,Azure 仍然不允许我添加域,所以我赌了一把,将域和 www 子域重新指
我正在使用terms facet在elasticsearch服务器中获取顶级terms。现在,我的标签"indian-government"不被视为一个标签。将其视为"indian" "governm
我是一名优秀的程序员,十分优秀!