我需要讀取一個二進制文件,其中一個字節數組的大小取決於一個可選值以及一個常數。我如何使用Preon實現這一目標?如何使用bean的屬性?
看來,字節數組的大小計算不能是有條件的,即。 size =「adaptationFieldControl == 0b10 || adaptationFieldControl == 0b11?184-adaptationFieldLength:184」
使用一種方法(見下面的示例)來計算動態大小會導致Preon失敗並導致:org.codehaus.preon。 el.BindingException:無法爲名爲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;
...
編解碼器不需要這些位在序列中嗎?在上述情況下,二進制數據包具有標題和大小字段的頭部,其描述了數據包的有效負載(MPEG-TS)中的後續內容。總之,有效載荷不在描述大小的字段旁邊。 – tchristensen
我將不得不看到一個實際的例子,但Preon中使用的表達式語言允許您伸出對象並獲取其他地方的一些數據。這就是很多註釋所做的。它們允許您從完全不同的位置獲取信息,只要數據已被讀取到目前爲止。 –