> 백엔드 개발 > C++ > C 프로토콜 버퍼 구분 I/O: Java와 동등한 기능이 있습니까?

C 프로토콜 버퍼 구분 I/O: Java와 동등한 기능이 있습니까?

Barbara Streisand
풀어 주다: 2024-12-05 00:32:12
원래의
179명이 탐색했습니다.

C   Protocol Buffer Delimited I/O: Are There Java-Equivalent Functions?

프로토콜 버퍼 구분 I/O 함수: C 등가?

C와 Java를 모두 사용하여 파일에서 여러 프로토콜 버퍼 메시지를 읽고 쓰려고 할 때 다음이 발생했습니다. Java는 이러한 목적으로 "구분된" I/O 함수 세트를 제공하는 것으로 나타났습니다. 그러나 C가 유사한 기능을 제공하는지 여부는 여전히 불확실합니다.

Java API 함수는 다음과 같습니다.

  • parseDelimitedFrom
  • mergeDelimitedFrom
  • writeDelimitedTo

ㄷ 등가물

버전 3.3.0부터 Google은 google/protobuf/util/delimited_message_util.h에 다음 C 등가물을 도입하여 이 문제를 해결했습니다.

bool writeDelimitedTo(
    const google::protobuf::MessageLite& message,
    google::protobuf::io::ZeroCopyOutputStream* rawOutput) {
  // Code to write delimited messages
}

bool readDelimitedFrom(
    google::protobuf::io::ZeroCopyInputStream* rawInput,
    google::protobuf::MessageLite* message) {
  // Code to read delimited messages
}
로그인 후 복사

Java 크기에 대한 와이어 형식 접두사

공식 라이브러리를 사용하지 않고 C에서 크기 접두사가 붙은 메시지를 구문 분석하려는 경우, 연결 형식은 다음과 같습니다.

  1. 메시지 크기는 32비트 가변 길이 정수로 표시됩니다.
  2. 역방향 연결을 보장하기 위해 크기 뒤에 단일 바이트가 추가됩니다.
  3. 메시지 데이터는 크기와 호환성 뒤에 추가됩니다. byte.

최적화

제공된 C 구현에는 다른 응답에서 누락된 최적화가 포함되어 있습니다. 이러한 최적화를 통해 다음 기능이 보장됩니다.

  • 64MB 입력 후에도 실패하지 않습니다.
  • 각 개별 메시지에 64MB 제한을 적용합니다.
  • 더 빠른 직접 사용 가능한 경우 배열 직렬화 경로를 사용하세요.

위 내용은 C 프로토콜 버퍼 구분 I/O: Java와 동등한 기능이 있습니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿