문제

부분 직렬화를 지원하는 기존 C ++ 직렬화 라이브러리가 있습니까?

"부분 직렬화"에 의해 3 개의 특정 구성원의 값을 저장하고 나중에 저장된 사본을 다른 인스턴스에 적용 할 수 있음을 의미합니다. 나는 그 3 명의 회원 만 업데이트하고 다른 회원을 그대로 두었습니다.

이것은 네트워크를 통해 데이터를 동기화하는 데 유용합니다. 클라이언트와 서버에 객체가 있고 회원이 서버를 변경하면 해당 멤버의 업데이트 된 값이 포함 된 메시지를 클라이언트에 보내고 자합니다. 그리고 그 회원 만. 나는 전체 객체의 사본을 와이어 위로 보내고 싶지 않습니다.

boost::serialization 한눈에 그것은 전부 또는 전혀 지원하는 것처럼 보입니다.

편집 : 원래 글을 쓴 지 3 년 후 나는 그것을 되돌아보고 나 자신에게 'wut?'라고 말합니다. Boost :: 직렬화를 사용하면 저장하려는 멤버를 정의 할 수 있으므로 설명한 것처럼 '부분 직렬화'를 지원할 수 있습니다. 또한 C ++는 반사 직렬화 라이브러리가 부족하기 때문에 소스 파일을 구문 분석하거나 C ++ 코드를 생성하는 데 사용되는 별도의 입력 파일 형식이없는 경우에 저장할 각 멤버를 명시 적으로 지정해야합니다 (예 : 프로토콜 버퍼가하는 일). 나는 이것을 썼을 때 개념적으로 혼란 스러웠을 것이라고 생각합니다.

도움이 되었습니까?

해결책

당신은 분명히 여기서 직렬화를 찾고 있지 않습니다.

직렬화는 물체를 저장 한 다음 바이트 스트림에서 재현하는 것입니다. 비디오 게임이 저장되거나 웹 서버의 세션 컨텍스트를 생각해보십시오.

여기에 필요한 것은 메시지입니다. 구글의 플랫 버퍼 그것에 대해 좋습니다. 모든 단일 필드를 옵션으로 포함하는 메시지를 메시지를 수신하면 메시지를 수신하면 존재하는 필드로 객체를 업데이트하고 다른 사람을 손대지 않게하십시오.

Flatbuffers의 가장 큰 장점은 텍스트 및 이진 인코딩뿐만 아니라 앞뒤로 호환성을 잘 처리한다는 것입니다 (텍스트 및 이진 인코딩 (텍스트는 순수한 성능에 더 나은 텍스트가 더 좋습니다).

그리고 어딘가에 저장하고 HTML GUI를 함께 던지기 위해 다른 언어 (Python 또는 Ruby)로 메시지를 디코딩 할 수도 있습니다!

다른 팁

나는 그들에게 익숙하지 않지만, 당신은 또한 체크 아웃 할 수 있습니다 Google의 프로토콜 버퍼.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top