1

최소 크기의 여러 언어 (파이썬/자바/c/cpp)를 교차하는 여러 개의 부동 소수점 배열을 직렬화하려고합니다.파일에서 여러 개의 플로트 배열을 직렬화하는 가장 좋은 방법

플로트 배열 헤더와 각 플로트에 4 바이트가 필요할 것으로 예상했습니다. 그러나 msgpack은 5 바이트가 필요합니다. https://github.com/msgpack/msgpack/issues/198#issue-87308597

플로트 배열을 직렬화하기위한 권장 라이브러리가 있습니까? float 당 4 바이트 이하? 아니면 그냥 원시 바이트 배열을 사용합니까?

답변

1

프로토콜 버퍼는 일부 프리미티브에 대해 "압축"배열을 지원합니다. 기본적 비용으로 운동한다 :

  • 어레이 (낮은 필드 번호는 1 바이트) 바이트 수
  • varint 길이 프리픽스위한 varint 필드 헤더
  • 바이트 수 (4 단 정밀도의 경우 값 당 바이트, 배정 밀도의 경우 값 당 8 바이트)

필드 5 (임의로)에 "packed"옵션으로 저장된 단 정밀도 float은 1 + 2 + 400 = 403 바이트가됩니다.