2

假设我有类似的东西:

 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例外)

听起来很奇怪我错过了什么?处理此类对象的最佳方法是什么?实现自己的序列化?

4

1 回答 1

1

Chronicle Values被设计为恒定大小的结构。如果您需要存储一些可变大小的字段,例如 CharSequences(包括字符串)或数组,您应该指定它们可能的最大大小,这个最大大小将始终分配给该字段,因此如果您存储较短的 CharSequences 或数组,您浪费了一些内存空间作为unreclmained。

如果这就是您所需要的,例如,如果您的所有数组实际上都具有相同的长度并且您不会浪费任何空间,或者数组长度略有不同,或者您有时可以浪费一些空间以获得其他将接口视为 Chronicle 的好处Map 的键或值提供,你可以在一个值接口中有数组字段,如下所示:

public interface ITest {
    @Array(length=CONSTANT_OR_MAX_ARRAY_LENGTH)
    long getDataAt(int index);
    void setDataAt(int index, long data);
}

https://github.com/OpenHFT/Chronicle-Values#array-fields

于 2016-04-08T09:36:36.160 回答