मैं प्रोटोकॉल बफ़र्स 'CodedOutputStream और FileOutputStream उपयोग कर रहा हूँ इस तरह एक फ़ाइल में अनुक्रम में एक से अधिक संदेशों को क्रमानुसार करने:एक अनुक्रमित संपीड़ित फ़ाइल में एकाधिक प्रोटोकॉल बफर के संदेशों को कैसे लिखें?
// File is opened using append mode and wrapped into
// a FileOutputStream and a CodedOutputStream
bool Open(const std::string& filename,
int buffer_size = kDefaultBufferSize) {
file_ = open(filename.c_str(),
O_WRONLY | O_APPEND | O_CREAT, // open mode
S_IREAD | S_IWRITE | S_IRGRP | S_IROTH | S_ISUID); //file permissions
if (file_ != -1) {
file_ostream_ = new FileOutputStream(file_, buffer_size);
ostream_ = new CodedOutputStream(file_ostream_);
return true;
} else {
return false;
}
}
// Code for append a new message
bool Serialize(const google::protobuf::Message& message) {
ostream_->WriteLittleEndian32(message.ByteSize());
return message.SerializeToCodedStream(ostream_);
}
// Code for reading a message using a FileInputStream
// wrapped into a CodedInputStream
bool Next(google::protobuf::Message *msg) {
google::protobuf::uint32 size;
bool has_next = istream_->ReadLittleEndian32(&size);
if(!has_next) {
return false;
} else {
CodedInputStream::Limit msgLimit = istream_->PushLimit(size);
if (msg->ParseFromCodedStream(istream_)) {
istream_->PopLimit(msgLimit);
return true;
}
return false;
}
}
कैसे मैं एक GzipOutputStream का उपयोग कर एक ही कर सकते हैं? क्या एक gzip संपीड़ित फ़ाइल को नए संदेशों को जोड़ने के लिए फिर से खोल दिया जा सकता है जैसे कि मैं कोडेडऑटपुटस्ट्रीम का उपयोग करता हूं?