2

次のようなものがあるとします。

 public interface ITest {
    long[] getDataArray();

    void setDataArray(long[] data);
  }

この場合、長い[]が使用できないように見えるため

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例外が発生しています)

奇妙に聞こえますが、私はsmthを見逃していますか? そのようなオブジェクトを操作するための最良のアプローチは何ですか? 独自のシリアル化を実装しますか?

4

1 に答える 1

1

Chronicle Valuesは、一定サイズの構造体として設計されています。CharSequences (文字列を含む) や配列などの可変サイズのフィールドを格納する必要がある場合は、それらの最大サイズを指定する必要があります。この最大サイズは常にフィールドに割り当てられるため、短い CharSequences または配列を格納する場合は、再利用されていないメモリ領域を無駄にします。

それが必要な場合、たとえば、すべての配列が実際には同じ長さであり、スペースを無駄にしない場合、または配列の長さがわずかに異なる場合、またはインターフェースを 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 に答える