Melaksanakan Fungsi I/O Terhad dalam C untuk Penimbal Protokol
Di Java, Protocol Buffers versi 2.1.0 memperkenalkan fungsi I/O yang dibataskan untuk memudahkan membaca dan menulis berbilang mesej daripada fail. Fungsi ini, parseDelimitedFrom, mergeDelimitedFrom, dan writeDelimitedTo, berfungsi dengan melampirkan awalan panjang pada mesej.
Soalan asal bertanya tentang kewujudan fungsi yang setara untuk C . Walaupun API Java menyediakan fungsi ini, perpustakaan C rasmi pada mulanya kekurangannya. Walau bagaimanapun, pada versi 3.3.0, Google menambahkan fungsi ini pada google/protobuf/util/delimited_message_util.h.
Jika anda menggunakan versi pustaka C yang lebih lama, anda boleh melaksanakan I/O terhad menggunakan kod berikut:
bool writeDelimitedTo( const google::protobuf::MessageLite& message, google::protobuf::io::ZeroCopyOutputStream* rawOutput) { // Create a new coded stream for each message. google::protobuf::io::CodedOutputStream output(rawOutput); // Write the message size. const int size = message.ByteSize(); output.WriteVarint32(size); uint8_t* buffer = output.GetDirectBufferForNBytesAndAdvance(size); if (buffer != NULL) { // Optimization: Serialize message directly to array if it fits. message.SerializeWithCachedSizesToArray(buffer); } else { // Slower path for messages spanning multiple buffers. message.SerializeWithCachedSizes(&output); if (output.HadError()) return false; } return true; } bool readDelimitedFrom( google::protobuf::io::ZeroCopyInputStream* rawInput, google::protobuf::MessageLite* message) { // Create a new coded stream for each message. google::protobuf::io::CodedInputStream input(rawInput); // Read the message size. uint32_t size; if (!input.ReadVarint32(&size)) return false; // Limit the stream to the message size. google::protobuf::io::CodedInputStream::Limit limit = input.PushLimit(size); // Parse the message. if (!message->MergeFromCodedStream(&input)) return false; if (!input.ConsumedEntireMessage()) return false; // Release the stream limit. input.PopLimit(limit); return true; }
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Melaksanakan I/O Terhad untuk Penampan Protokol dalam C?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!