The protocol buffer format expects you to remember where the message ends;
it cannot figure out for itself.  So, you need to write the size of each
message to your file before you write the message itself.

On Mon, Oct 27, 2008 at 11:42 AM, Amit Gupta <[EMAIL PROTECTED]> wrote:

>
> I have message defined as
> message Person
> {
>  required int32 id;
> }
>
> and than, after protoc-compiling I dump 500 Million of such buffers
> using a c++ application into a file.
>
> Now, when I read it back using a different C++ application (and
> ParseFromIoStream, I get an error "message too long and look at the
> file ..."
>
> My intended behavior is to read the pb-message one at a time, analyze
> its content and than read next message. For some reason. when I
> deseralize from iostream, pb is reading and deseralizing full content
> of the file.
>
> How can I make the deserialization to work online, one message at a
> time from the IoStream.
>
> My code is attached below.
>
> Many Thanks, Amit
>
>
> #include <stdio.h>
> #include <iostream>
> #include <string>
> #include <fstream>
> #include <cstdlib>
> #include "temp.pb.h"
>
> using namespace std;
>
> #define MAX 500000000
>
> void write()
> {
>  fstream output("out.db", ios::out | ios::trunc | ios::binary);
>
>  for(int num = 0; num < MAX; ++num)
>  {
>    Person p;
>    p.set_id(num);
>    p.SerializeToOstream(&output);
>  }
> }
>
> void read()
> {
>  fstream input("out.db", ios::in  | ios::binary);
>
>  int num = 0;
>  for(; num < MAX; ++num)
>  {
>    Person p;
>    p.ParseFromIstream(&input);
>  }
>  cout << endl << num << endl;
> }
>
> int main()
> {
>  write();
>  //cout << "Done Writing";
>  read();
>  cout << "Done reading" << endl;
>  return 0;
> }
>
>
>
> >
>

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Protocol Buffers" group.
To post to this group, send email to protobuf@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to