バイト配列のサイズがオプションの値と定数に依存するバイナリ ファイルを読み取る必要があります。Preonを使用してこれを達成するにはどうすればよいですか?
バイト配列サイズの計算は条件付きではできないようです。size="adaptationFieldControl==0b10 || adaptFieldControl==0b11 ? 184-adaptationFieldLength : 184"
メソッド (以下のサンプルを参照) を使用して動的サイズを計算すると、Preon は「Caused by: org.codehaus.preon.el.BindingException: Failed to create binding for bound data called getPayloadLength.
public class packet {
@BoundNumber(size = "2")
byte adaptationFieldControl;
/**
* Returns the size of the payload if present in the packet
* @return size corrected for adaptation fields
*/
public int getPayloadLength() {
if(isAdaptationFieldsPresent()) {
return 188 - (4+adaptationFieldLength);
}
return 188-4;
}
@If("adaptationFieldControl==0b10 || adaptationFieldControl==0b11")
@BoundNumber(size="8")
short adaptationFieldLength;
@If("adaptationFieldControl==0b01 || adaptationFieldControl==0b11")
@BoundList(size="payloadLength")
byte[] payload;
...