you mean we should write the file like this?
(sizeof a message) | (serialized message) | (sizeof another message)
| (another serialized message) |....| so on and so forth

while reading, we'd first read the message size, then read data with
the specified size to a stream, after that I can get it parsed;

is that so ?

On Oct 28, 5:36 am, "Kenton Varda" <[EMAIL PROTECTED]> wrote:
> 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;
> > }- Hide quoted text -
>
> - Show quoted text -
--~--~---------~--~----~------------~-------~--~----~
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