我想创建一个长键和一个可变大小的字节[],一个序列化的Java位集精确的编年史图。我可以使用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是开箱即用的,但是我找不到一个有效的例子,所以决定在这里问一下。
谢谢!这工作!看起来像翻转造成了所有的差异。 –