假设我有点像:
public interface ITest {
long[] getDataArray();
void setDataArray(long[] data);
}
在这种情况下因为long []看起来我不能使用
Values.newHeapInstance(ITest.class);
(我得到field type class [Lnet.openhft.chronicle.core.values.LongValue; is not supported: not a primitive, enum, CharSequence or another value interface
例外)
听起来很奇怪我错过了什么?使用这些对象的最佳方法是什么?实现自己的序列化?
答案 0 :(得分:1)
Chronicle Values被设计为恒定大小的结构。如果你需要存储一些可变大小的字段e。 G。 CharSequences(包括字符串)或数组,您应该指定它们可能的最大大小,这个最大大小将始终为该字段分配,因此如果您存储较短的CharSequences或数组,则会浪费一些内存空间作为未重新安排。
如果这是你需要的,e。 G。如果你的所有数组实际上都是相同的长度并且你不会浪费任何空间,或者数组长度略有不同,或者你可以浪费一些空间来获得其他有益于接口的其他好处,因为Chronicle Map的键或值提供了,你可以在值接口中有数组字段,如下所示:
public interface ITest {
@Array(length=CONSTANT_OR_MAX_ARRAY_LENGTH)
long getDataAt(int index);
void setDataAt(int index, long data);
}