如何使用bean属性



我需要读取一个二进制文件,其中字节数组的大小取决于可选的值以及恒定数字。如何使用Preon实现这一目标?

看来字节数组大小计算不能是条件IE。size =" AdaptationFieldControl == 0B10 || AdaptationFieldControl == 0B11?184-AdaptationFieldLength:184"

使用一种方法(请参见下面的示例)来计算动态大小使PREON失败的失败是由以下原因引起的:org.codehaus.preon.el.bindingexception:无法为绑定的数据创建称为getPayloadegenth的绑定。

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;

...

preon使用语言" limbo"来实现表达式评估。在Limbo中,评估为true的表达式将以" 1"(和false" 0")的值。

作为表达式:

size=adaptationFieldControl==0b10 || adaptationFieldControl==0b11
    ? 184-adaptationFieldLength : 184

可能采用:

的形式
size=184-(adaptationFieldControl==0b10||adaptationFieldControl==0b11)
    *adaptationFieldLength

我对其进行了测试,不幸的是,方法大小不接受它。我有例外:

org.codehaus.preon.el.InvalidExpressionException: NoViableAltException(18@[])

它缝制的逻辑令牌仅通过" @if"注释来理解。

作为解决方法,我建议您定义以" @if"注释前缀的两个字段,然后实现" null"的两个字段,然后返回" non-null"一个字段。

除非我完全错误,否则@If注释实际上会防止该字段被注册,如果条件为false。因此,根据preon的说法,没有称为 addaptationFieldLenght的字段。这,并且Preon现在可以与方法结合。从技术上讲,没有什么可以防止其实现的,但是我想确保您可以生成对文件格式的明智的HTML描述,并且如果隐藏了方法内部的逻辑,则无法将其转换为文档。

如果您有一些复杂的逻辑,这些逻辑根本不适合有困难表达式,那么您可能会为其创建Codec。这样,您可以确保在生成的文件格式的描述中也记录了逻辑。

相关内容

  • 没有找到相关文章

最新更新