我正在尝试使用 Long 键和可变大小的 byte[] 创建一个 Chronicle 映射,准确地说是一个序列化的 Java BitSet。我可以使用 Values 接口创建地图,但其中的数组大小是固定的。
因此,我希望使用 byte[] 或 Bytebuffer,因为它们是动态调整大小的,因此可以节省内存。这是受支持的用例吗?是否有使用带有 byte[] 或 ByteBuffer 值类的编年史地图的示例?以下代码失败
ChronicleMap<Long, ByteBuffer> map = ChronicleMap
.of(Long.class, ByteBuffer.class)
.name("shard_map")
.averageValueSize(1000)
.entries(1_000_000)
.create();
ByteBuffer ts2 = ByteBuffer.allocateDirect(10);
ts2.putInt(10);
map.put(1L, ts2);
System.out.println(map.get(1L).getInt());
出现错误:
Exception in thread "main" java.nio.BufferUnderflowException
at java.nio.Buffer.nextGetIndex(Buffer.java:506)
at java.nio.HeapByteBuffer.getInt(HeapByteBuffer.java:361)
我尝试使用 Values.newHeapInstance 创建值对象,但失败并出现错误:
Exception in thread "main" java.lang.IllegalArgumentException: class java.nio.ByteBuffer is not an interface nor a generated class native or heap class
at net.openhft.chronicle.values.ValueModel.notValueInterfaceOfImpl(ValueModel.java:68)
at net.openhft.chronicle.values.ValueModel.lambda$acquire$0(ValueModel.java:64)
at net.openhft.chronicle.values.ValueModel.doSomethingForInterfaceOr(ValueModel.java:85)
at net.openhft.chronicle.values.ValueModel.acquire(ValueModel.java:63)
at net.openhft.chronicle.values.Values.heapClassFor(Values.java:68)
at net.openhft.chronicle.values.Values.newHeapInstance(Values.java:37)
文档说 byte[] 和 ByteBuffer 支持开箱即用,但我找不到它的工作示例,所以决定在这里询问。