この質問は非常に古いものですが、preon のドキュメントはかなりひどいので、最近これを掘り下げたので、これらの質問のいくつかに答えようと思います。
Preon は次の 2 つのフェーズで動作します。 デコードを要求したクラスをデコードできる Mega-Codec の作成 コーデックの実行
第 1 フェーズは、第 2 フェーズの Codec クラスを生成する CodecFactory クラスによってサポートされます。
追加の CodecFactory を登録するには、次のように preon を呼び出します。
DefaultCodecFactory fact = new DefaultCodecFactory();
CodecFactory someFactory = new DefaultCodecFactory();
CodecFactory[] additional = new CodecFactory[1];
additional[0] = someFactory;
Codec<MyClass> myCodec = fact.create(null, MyClass.class, additional,
new CodecDecorator[0], new BindingDecorator[0]);
MyClass result = Codecs.decode(myCodec, buffer);
someFactory を実際の工場に置き換えるだけです。実際のファクトリを書くのは面倒です。そのためには、create メソッドを実装する必要があります。
public <T> Codec<T> create(AnnotatedElement metadata, Class<T> type,
ResolverContext context) {
Preon はほとんどの場合、ファクトリのリストを調べて、逆シリアル化するように要求されたクラス内のすべての要素を処理する方法を知っているファクトリを見つけようとします。したがって、メタデータと型パラメーターに基づいて、逆シリアル化する現在のクラス プロパティがサポートしたいものであるかどうかを判断する必要があります。ほとんどの場合、@BoundBCD アノテーションを追加してから、次のようなチェックを行います。
metadata.getAnnotation(BoundBCD.class)) != null
処理したいケースでは、少なくとも Codec インターフェイスのデコード メソッドを実装する Codec クラスを返す必要があります (getCodecDescriptor も実装する必要があるかもしれません。私が作成したものには、リスト コーデックからコピー アンド ペーストされたものがあります)。
関連するすべてのパラメーターを使用してこのコーデックを作成する必要があります。たとえば、注釈にサイズ フィールドがある場合 (または型のサイズから推測している場合)、それを返す前にコーデックで初期化する必要があります。式である場合、その式を評価用にコーデックに保存する必要があります。そうすれば、コーデックのデコード機能を使用しているときに、実際に実行する必要があるすべてのデータが得られ、BitBuffer から適切に型指定されたオブジェクトを作成するだけで済みます。