Java의 프로토콜 버퍼 구분 I/O 함수에 대한 C 등가물
C에는 "구분된" I에 대한 직접적인 등가물이 없습니다. /O 기능은 Java의 프로토콜 버퍼 API 버전 2.1.0에 도입되었습니다. 이러한 함수를 사용하면 길이 접두사가 첨부된 여러 프로토콜 버퍼 메시지를 읽고 쓸 수 있습니다.
Java 구분 I/O 함수의 와이어 형식
Java "구분된" I/ O 함수는 Google에서 문서화하지 않은 연결 형식을 사용합니다. 그러나 C 및 Java protobuf 라이브러리의 작성자는 유사한 기능의 비공식 구현을 제공했습니다.
<code class="cpp">bool writeDelimitedTo( const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput) { // Write the size. const int size = message.ByteSize(); output.WriteVarint32(size); // Serialize the message. uint8_t* buffer = output.GetDirectBufferForNBytesAndAdvance(size); if (buffer != NULL) { message.SerializeWithCachedSizesToArray(buffer); } else { message.SerializeWithCachedSizes(&output); } return true; } bool readDelimitedFrom( google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message) { // Read the size. uint32_t size; if (!input.ReadVarint32(&size)) return false; // Limit the stream to the size of the message. google::protobuf::io::CodedInputStream::Limit limit = input.PushLimit(size); // Parse the message. if (!message->MergeFromCodedStream(&input)) return false; // Verify that the entire message was consumed. if (!input.ConsumedEntireMessage()) return false; // Release the limit. input.PopLimit(limit); return true; }</code>
이러한 구현은 64MB 크기 제한이 전체 스트림이 아닌 각 메시지에 개별적으로 적용되도록 보장합니다. 또한 메시지 크기가 상대적으로 작을 때 최적화를 활용하여 성능을 향상시킵니다.
위 내용은 프로토콜 버퍼에 대해 C에서 구분된 I/O 기능을 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!