Difference between protobuf implementations

175 views
Skip to first unread message

rahul prasad

unread,
Nov 10, 2009, 10:28:27 AM11/10/09
to Protocol Buffers
Hi,

May i ask whats the difference between these two protobuf implementations?

com.google.common.io.protocol.ProtoBuf.java

com.google.protobuf package classes

and when to use which?

Regards,
Rahul




Kenton Varda

unread,
Nov 10, 2009, 2:36:12 PM11/10/09
to rahul prasad, Protocol Buffers
On Tue, Nov 10, 2009 at 7:28 AM, rahul prasad <rah...@gmail.com> wrote:
Hi,

May i ask whats the difference between these two protobuf implementations?

com.google.common.io.protocol.ProtoBuf.java

I've never heard of this.  Where does it come from?
 
com.google.protobuf package classes

This is the official implementation.

rahul prasad

unread,
Nov 10, 2009, 4:36:57 PM11/10/09
to Henner Zeller, Kenton Varda, Protocol Buffers
So, If I am developing for Android, should I use this protobuf library instead of the standard implementation present at com.google.protobuf? Will I encounter any problems mid way due to this switch? Any feedback would be greatly appreciated.

Regards,
Rahul


On Tue, Nov 10, 2009 at 3:56 PM, Henner Zeller <h.ze...@acm.org> wrote:
Seems to be part of Android
 http://www.google.com/codesearch?q=com.google.common.io.protocol.ProtoBuf

Kenton Varda

unread,
Nov 10, 2009, 4:56:28 PM11/10/09
to rahul prasad, Henner Zeller, Protocol Buffers
You'd have to ask the Android people, as they are the owners of this alternate implementation.  IIRC, they have not released the code generator program to go with it, so you probably won't be able to use it.

The official protobuf implementation in "lite mode" should work great on Android -- this is exactly the use case lite-mode was created for.  Add the following to your .proto file in order to use lite mode:
  option optimize_for = LITE_RUNTIME;

So I'd recommend using the official implementation, but again I know almost nothing about Android's implementation so it's hard for me to make an informed recommendation.

rahul prasad

unread,
Nov 10, 2009, 7:00:36 PM11/10/09
to Protocol Buffers
I am in a situation, where the .proto files are not present for the Protocol Buffers used in the application I am working on. Since the .proto files need to be created, I was wondering if the following yellow highlighted numbers should correspond to the same fields they stood for in the actual .proto files which were used to generate the classes?

For example, - 

old proto file:
package protos;
message Person {
  required string name = 1;
  optional string age = 2;
}

new proto file:
package protos;
message Person {
  required string name = 2;
  optional string age = 1;
}

will this throw error when trying to retrieve data?, so what would your suggestion be in creating such a proto file when the original is not present.

Regards,
Rahul

Kenton Varda

unread,
Nov 10, 2009, 7:16:35 PM11/10/09
to rahul prasad, Protocol Buffers
Yes, the tag numbers have to be the same.

If you have code that was generated from the original .proto file, look inside it for comments that look like proto field definitions -- they should include the tag number.  Otherwise you're out of luck.

rahul prasad

unread,
Nov 11, 2009, 9:34:48 AM11/11/09
to Kenton Varda, Protocol Buffers
Hi,

I am getting errors when trying to "protoc" the .proto file i created. I am trying to import message definition from a different file present in the same directory as the one being compiled with this at the top - 

package testpackage;
import "TestimportProto.proto";

but I still get the following error when compiling - 

rahul$ protoc  --proto_path="/Users/rahul/NetBeansProjects/Testproj"  --java_out "/Users/rahul/NetBeansProjects/AndMarket/build/generated-sources/protobuf-java" "/Users/rahul/NetBeansProjects/Testproj/src/java/Test.proto"
TestimportProto.proto: File not found.
src/java/Test.proto: Import "TestimportProto.proto" was not found or had errors.
src/java/Test.proto:19:12: "TestimportInfo" is not defined.
src/java/Test.proto:30:12: "Testimportstate" is not defined.

Anyone can help? Greatly appreciate it.

Regards,
Rahul

Kenton Varda

unread,
Nov 11, 2009, 12:21:40 PM11/11/09
to rahul prasad, Protocol Buffers
"import" looks for the file in the proto_path, not in the same directory as the importing file.
Reply all
Reply to author
Forward
0 new messages