Trước hết, bạn không thể phân tích dữ liệu PB mà không biết lược đồ. Giản đồ ban đầu xuất phát từ tệp ".proto" và thường được nhúng trong mã được tạo bởi protoc
. Tuy nhiên, bạn cũng có thể cho protoc
để lưu trữ các lược đồ trong một định dạng đó là có thể sử dụng bởi các thư viện Java Protobuf:
protoc --descriptor_set_out=mymessages.desc mymessages.proto
Sau đó tải nó trong mã Java của bạn:
FileInputStream fin = new FileInputStream("mymessages.desc");
Descriptors.FileDescriptorSet set =
Descriptors.FileDescriptorSet.parseFrom(fin);
Descriptors.Descriptor md = set.getFile(0).getMessageType(0);
Một khi bạn có schema cho nhắn (Descriptor.Descriptor
) phân tích cú pháp nhắn rất dễ dàng:
byte[] data = ...;
DynamicMessage m = DynamicMessage.parseFrom(md, data);
DynamicMessage
có một API phản chiếu cho phép bạn xem xét thông qua các lĩnh vực.
Phần lộn xộn đang kêu gọi công cụ protoc
chuyển đổi tệp ".proto" thành định dạng có thể sử dụng. Thư viện C++ Protobuf có cách tải trực tiếp các tệp ".proto", nhưng không may là thư viện Java Protobuf không có.
Nguồn
2011-03-14 12:58:44
nếu bạn cần sử dụng findMessageTypeByName ("Người") không có nghĩa là bạn cần biết loại đối tượng trước khi phân tích cú pháp đó? –