2016-04-08 4 views
1

私のようななめらかいるとしますプリミティブの配列のクロニクルマップのサポート?

は奇妙な私はね(私はfield type class [Lnet.openhft.chronicle.core.values.LongValue; is not supported: not a primitive, enum, CharSequence or another value interface例外を取得しています)私は

Values.newHeapInstance(ITest.class); 

を使用することはできませんように長いための

この場合
public interface ITest { 
    long[] getDataArray(); 

    void setDataArray(long[] data); 
    } 

[]が見えます失礼を逃した?そのようなオブジェクトを扱う最良の方法は何ですか?独自のシリアル化を実装しますか?

答えて

1

Chronicle Valuesは、一定サイズの構造として設計されています。いくつかの可変サイズのフィールドを保存する必要がある場合e。 g。 CharSequences(文字列を含む)または配列の場合、最大サイズを指定する必要があります。この最大サイズは常にフィールドに割り当てられます。したがって、短いCharSequenceまたは配列を格納すると、メモリスペースがunreclmainedとして浪費されます。

これが必要な場合は、e。 g。すべての配列が実際に同じ長さであり、スペースを無駄にしたり、配列の長さがわずかに変化したり、クロニクルマップのキーや値が提供するようなインターフェイスを評価するその他のメリットがある場合は、次のように値インタフェースの配列フィールドを持っている:

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

+0

おかげでローマを参照してください、それは私が探していたものです。実際には私はちょうどその情報をgoogleできなかったことは少し奇妙です。 –

+0

クイックフォローアップの質問:固定サイズの配列を持つインターフェースを持っていれば - たとえば、LongValueの場合と同じサイズのマップを計算するのに十分なスマートマップですか?ですから、私はダミーのサンプルオブジェクトを作成してビルダーに渡す必要はありませんか? –

+0

@ ConstantinKulagin、はい、Chronicle Mapはバリューインターフェイスについて知っています。値タイプがバリューインターフェイスの場合、値のサイズを自分で指定する必要はありません。 – leventov

関連する問題