바이트 배열의 크기가 상수뿐만 아니라 선택적 값에 의존하는 이진 파일을 읽어야합니다. Preon을 사용하여 어떻게 이것을 얻을 수 있습니까?preon은 bean 등록 정보를 어떻게 사용할 수 있습니까?
바이트 배열 크기 계산은 조건식 일 수 없다. 크기 = "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에서 사용 된 표현식 언어를 사용하면 오브젝트 밖으로 도달하고 다른 곳에있는 일부 데이터를 가져올 수 있습니다. 그것이 많은 주석이하는 일입니다. 그들은 데이터가 지금까지 읽혀져있는 한 완전히 다른 위치에서 정보를 얻을 수 있습니다. –