You cannot clear the unknown fields in a message because messages are
immutable. However, you can parse the bytes into a builder, and then clear
the unknowns fields there.

On Sat, Oct 22, 2011 at 3:52 PM, Ashwin Jayaprakash <
ashwin.jayaprak...@gmail.com> wrote:

> Hi, I have 2 simple messages defined - Person and PersonLite. PersonLite
> (5 fields) is actually a smaller "view" of Person (20 fields).
>
> I was thinking of using PersonLite to read in the contents of a message
> that was written by Person. It works alright by reading 5 fields, but
> PersonLite also reads the remaining 15 fields into the UnknownFields map
> which is an unmodifiable collection. I was hoping to read the subset of the
> fields and then discard the unknown fields but alas..!!
>
> Is there a reason why UnknownFields cannot be cleared by the user? I
> wanted to serialize PersonLite from Person's data and send only those 5
> fields over the network. But now I realize that the entire 20 fields get
> serialized.
>
> Proto below:
> package com.javaforu.demo.protobuf;
>
> option java_package = "com.javaforu.demo.protobuf";
> option java_outer_classname = "DemoProtos";
>
> message Person {
>     required string field_1 = 1;
>     optional string field_2 = 2;
>     optional string field_3 = 3;
>     optional string field_4 = 4;
>     optional string field_5 = 5;
>     optional string field_6 = 6;
>     optional string field_7 = 7;
>     optional string field_8 = 8;
>     optional string field_9 = 9;
>     optional string field_10 = 10;
>     optional string field_11 = 11;
>     optional string field_12 = 12;
>     optional string field_13 = 13;
>     optional string field_14 = 14;
>     optional string field_15 = 15;
>     optional string field_16 = 16;
>     optional string field_17 = 17;
>     optional string field_18 = 18;
>     optional string field_19 = 19;
>     optional string field_20 = 20;
> }
>
> message PersonLite {
>     required string field_1 = 1;
>     optional string field_5 = 5;
>     optional string field_10 = 10;
>     optional string field_15 = 15;
>     optional string field_20 = 20;
> }
>
>
> Java code:
> public class TestPerson {
>     public static void main(String[] args) throws IOException {
>         Person person = Person.parseFrom(new FileInputStream(args[0]));
>         System.out.println("Read into " + person.getClass().getName() + "
> from " + args[0]);
>         System.out.println(person);
>         System.out.println("Bytes length " + person.getSerializedSize());
>
>         System.out.println();
>         PersonLite personLite = PersonLite.parseFrom(new
> FileInputStream(args[0]));
>         System.out.println("Read into " + personLite.getClass().getName()
> + " from " + args[0]);
>         System.out.println(personLite);
>         System.out.println("Bytes length " +
> personLite.getSerializedSize());
>     }
> }
>
>
> Ashwin.
>
>
>  --
> You received this message because you are subscribed to the Google Groups
> "Protocol Buffers" group.
> To view this discussion on the web visit
> https://groups.google.com/d/msg/protobuf/-/vJwtr6NZxJAJ.
> To post to this group, send email to protobuf@googlegroups.com.
> To unsubscribe from this group, send email to
> protobuf+unsubscr...@googlegroups.com.
> 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 protobuf@googlegroups.com.
To unsubscribe from this group, send email to 
protobuf+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/protobuf?hl=en.

Reply via email to