How to write messages of several protocol buffers to a compressed compressed file?

I use the protocol buffers CodedOutputStream and FileOutputStream to consecutively convert multiple messages to a file like this:

// 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; } } 

How can I do the same with GzipOutputStream? Is it possible to re-open the compressed gzip file to add new messages, for example, using CodedOutputStream?

+6
source share
1 answer

I just realized that I just need to wrap a FileOutputStream in another GzipOutputStream as follows:

 file_ostream_ = new FileOutputStream(file_, buffer_size); gzip_ostream_ = new GzipOutputStream(file_ostream_); ostream_ = new CodedOutputStream(gzip_ostream_); 

and when reading, just do the same:

 file_istream_ = new FileInputStream(file_, buffer_size); gzip_istream_ = new GzipInputStream(file_istream_); istream_ = new CodedInputStream(gzip_istream_); 

Close and open the file again to add messages is also excellent.

+1
source

All Articles