2017-09-07 2 views
1

저는 Protobuf를 처음 접했고 이것이 가능한지 모르겠습니다. proto 파일에 fixed32 데이터 유형이있는 경우 모든 기존fixed32 값도 읽을 수 있도록 (즉, 이전 버전과의 호환성) fixed64으로 업그레이드 할 수 있습니까?데이터 유형을 업그레이드 할 수 있습니까?

그렇지 않은 경우 이러한 업그레이드를 수행하는 가장 좋은 방법은 무엇입니까?

답변

1

tl; dr 예.하지만 정확한 유형은 아닙니다.

모두 바 인트 인코딩 된 유형간에 자유롭게 이동할 수 있습니다. 왜냐하면 모두 바코드에서 정확히 동일한 인코딩을 사용하기 때문입니다. documentation에서

:

int32, uint32, int64, uint64bool 모두 호환 - 이것은 당신이 forwards- 또는 파괴하지 않고 다른 이들 유형 중 하나에서 필드를 변경할 수 있음을 의미 이전 버전을 호환 . 해당 유형에 맞지 않는 와이어에서 숫자가 파싱되는 경우 C++에서 해당 유형으로 숫자를 캐스팅 한 것과 같은 효과를 얻습니다 (예 : 64 비트 숫자가 int32으로 읽혀질 경우, 32 비트로 잘립니다).

슬프게도,이 (sfixed64 만 호환) 및 fixed64 (sfixed32 만 호환되는) fixed32 적용되지 않습니다.

fixed32 필드를 사용하여 많은 양의 데이터가 이미있는 경우 새로운 int64 필드를 만들고 기존 필드에서 새 필드로 점진적으로 전환해야합니다 (새 코드는 두 필드를 모두 읽지 만 새 필드 만 채우기 만합니다) .

관련 문제