Well ok, using gzip streams would obviously give you something different (the bytes would come out gzipped). But none of the stream types you listed make a difference.
On Wed, Dec 2, 2009 at 12:25 PM, Kenton Varda <[email protected]> wrote: > It doesn't matter what kind of stream you use. Protobufs just read and > write bytes. You'll get the exact same result with any kind of stream. > > > On Wed, Dec 2, 2009 at 12:13 PM, Nigel Pickard <[email protected]>wrote: > >> Thanks for the reply Adam -I did a simple sub into my code with your >> suggestion, but it doesn't work. However, now it's made me think of >> more questions..... >> >> If protocol buffers doesn't use object I/O streams, which streams does >> it use? The argument in Java simply asks for an OutputStream >> argument, and of course that could mean File, ByteArray, Object, Data, >> etc.... >> >> And perhaps more importantly, will the choice of Java stream types >> impact how GPB objects may be reconstituted in C++? At the simplest >> level I assume this can be done: >> >> I can create a GPB class called "GPBCar". >> I have an outputstream (of some type, not sure!) over a socket in Java >> I want to write to. >> After creating my GPBCar object, I use the GPB "writeTo(output)" >> method on the Java side. >> My C++ app takes some form of this byte stream and reconstitutes my >> GPBCar instance by using the equivalent of the "parseFrom" method from >> the GPBCar. >> >> My understanding is that I have converted my GPBCar to a series of >> bytes that represent that GPBCar instance. Now I have a C++ app at the >> other end of the socket connection. But will the series of bytes be >> in the correct order (endianness?). Will the outputstream type be >> particular to Java, or will I encounter problems by using certain >> specific Java outputstreams? Should I only be using the >> CodedDataOutputStream provided by GPB? (I note that there is >> implementations of this stream in both the C++ and Java GPB >> implementations). >> >> I should add I've tried to find answers to these questions on the >> board and web, but with no luck. Again, if anyone has a simple >> example of how they used GPB to communicate over a socket from a Java >> to a C++ app, I'd love to see it (or just point me in the right >> direction). >> >> >> On Dec 2, 1:14 pm, Adam Vartanian <[email protected]> wrote: >> > >> > Protocol buffer code doesn't use object streams, so when you pass one >> > to its writeTo/parseFrom methods, you're actually passing the object >> > stream as a regular OutputStream or InputStream, ie, your code is >> > already serializing to and from bytes. If you'd rather be explicit >> > about it, you can just switch your stream's type from >> > ObjectOutputStream to OutputStream (similarly with Input) and it >> > should continue to work the same. All that should require is instead >> > of doing something like >> > >> > ObjectOutputStream output = new >> ObjectOutputStream(socket.getOutputStream()); >> > message.writeTo(output); >> > >> > you do something like >> > >> > OutputStream output = socket.getOutputStream(); >> > message.writeTo(output); >> > >> > For interacting with C++, you should be able to use the standard C++ >> > API for reading in messages, since the data is already on the wire in >> > byte format. >> > >> > - Adam >> >> -- >> >> You received this message because you are subscribed to the Google Groups >> "Protocol Buffers" group. >> To post to this group, send email to [email protected]. >> To unsubscribe from this group, send email to >> [email protected]<protobuf%[email protected]> >> . >> For more options, visit this group at >> http://groups.google.com/group/protobuf?hl=en. >> >> >> > -- You received this message because you are subscribed to the Google Groups "Protocol Buffers" group. To post to this group, send email to [email protected]. 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.
