protobuf-net 역직렬화에서 알 수 없는 행 유형 예외 문제 해결
protobuf-net에서 역직렬화 프로세스 중에 ProtoException이 발생하고 메시지는 "unknown wire-type 6"입니다. 이는 입력 데이터에 예상치 못한 필드 유형이 있음을 나타냅니다. 이 문제를 해결하려면 선 종류의 개념을 이해하고 근본 원인을 파악해야 합니다.
선 종류 이해
라인 유형은 후속 데이터 형식을 지정하는 필드 헤더의 3비트 플래그입니다. 이는 스트림에서 예상치 못한 데이터를 처리하는 데 중요합니다. 각 선 유형 값은 특정 데이터 유형에 해당합니다.
- 0: 가변 길이 정수(base-128 인코딩)
- 1: 64비트 정수 또는 배정밀도 부동 소수점 숫자
- 2: 길이 접두어(문자열, 바이트 배열, 팩형 배열, 하위 객체)
- 3: 그룹 시작(지원 중단됨)
- 4: 끝 그룹(지원 중단됨)
- 5: 32비트 정수 또는 단정밀도 부동 소수점 숫자
디버깅 문제
알 수 없는 선 유형 예외를 일으키는 문제 필드를 정확히 찾아내려면:
-
입력 데이터 유효성 검사: 입력 데이터가 실제 protobuf 데이터이고 다른 형식(예: JSON, XML)이 아닌지 확인하세요.
-
파일 잘림 확인: 파일로 직렬화하는 경우 쓰기 전에 파일이 잘리지 않았는지 확인하세요. 잘리지 않은 파일에는 잔여 데이터가 포함되어 protobuf 스트림이 손상될 수 있습니다.
-
객체 호환성 확인: 역직렬화된 객체 유형이 직렬화에 사용된 유형과 일치하는지 다시 확인하세요. 잘못된 유형으로 역직렬화하면 이 예외가 발생할 수 있습니다.
기타 팁
- WireShark와 같은 도구를 사용하여 바이너리 스트림을 검사하고 문제가 있는 필드의 연결 유형을 식별합니다.
- ProtoSyntaxDefault 옵션을 더 엄격한 라인 형식을 갖고 알 수 없는 라인 유형 문제를 방지하는 protobuf 3으로 설정합니다.
- 역직렬화 중에 알 수 없는 연결 유형에 플래그를 지정하려면 ThrowProtoExceptionOnUnknownWireTypes 옵션을 활성화하는 것이 좋습니다.
위 내용은 protobuf-net 역직렬화 중에 'Unknown Wire-Type 6' 예외가 발생하는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!