2010-03-18 2 views
1

내 질문의 제목이 정확한지, 아니면 아마 그렇지 않은지 아직 확실하지 않습니다. 그러나 나는 그물과 stackoverflow 모두 검색하는 시간을 보냈고 내가 직면하고있는 문제에 대한 좋은 설명을 찾을 수 없습니다.조건부 역 직렬화

기본적으로 달성하고자하는 것은 일부 원시 바이트를 읽고 나머지는 다른 방식으로 해석하는 값을 기반으로합니다. 이것은 어떤 방식 으로든 TLV이 작동하는 방식이며, 태그를 확인하고 그에 따라 결과를 해석합니다. 물론 필자는 항상 C++ 코드에서 그 논리를 유지할 수 있지만, 소스 코드에서 로직을 이동시키는 해결책을 찾고있다. 이렇게하면 다른 인코딩 (프로토콜)을보다 쉽게 ​​설명 할 수 있습니다. 필자는 프로토콜 버퍼 및 일부 직렬화 라이브러리에 익숙하지만 모두 다른 문제를 해결합니다. 그들은 의사 소통의 양끝에 있다고 가정하면서 의사 소통 (일종의)을 묘사하고 싶습니다.

그러한 솔루션을 사용할 수 있습니까? 내가 구현하려고하는 몇 가지 고유 한 어려움이 있는가?

답변

1

나는이 점을 안다.

왜 아무 것도없는 이유는 아마 아무도 필요하지 않을 것입니다. 통신 프로토콜은 크게 변경되지 않으므로 발생하지 않는 변경에 대응할 수있는 능력을 지불해야하는 이유는 무엇입니까?

3

나는 이것이 쉬운 일이라고 생각한다.

두 가지 중요한 개념 : 1) 공장 및 2) 개체 컨트롤 비 직렬화. 팩토리는 ID 또는 태그를 기반으로 객체 인스턴스를 만듭니다. 객체가 생성되면 객체는 데이터 스트림 (또는 버퍼)에서 멤버를로드합니다.

더 간단한 디자인은 중첩 된 팩터 리를 구현하는 것일 수 있습니다. 팩토리는 ID를 기반으로 하위 팩토리를 호출합니다. 이것은 적절한 정적 인스턴스를 생성하기 위해 최종 정적 생성 메소드가 호출 될 때까지 체인을 계속할 수 있습니다.

최종 개체가 스트림 (또는 버퍼)에 전달되고 데이터 멤버가로드됩니다. 외부 객체 또는 함수가 아닌 객체를로드하는 이유는 객체가 객체의 유형 및 레이아웃을 알고 있기 때문입니다. 또한 모든 것이 하나의 위치에 있으므로 데이터 멤버가 추가되거나 제거 될 때 객체 만 변경되고 다른 외부 함수 (객체 데이터 멤버에 액세스하는)는 변경되지 않습니다.

희망이 도움이됩니다.