package sample;
import java.util.ArrayList;
import java.util.List;
import org.apache.commons.lang.SerializationUtils;
import sample.ProtoObj.Attachment;
public class Main {
public static void main(String args[]){
POJO pojo = new POJO();
pojo.setContent("content");
List<sample.POJO.Attachment> att = new ArrayList<POJO.Attachment>();
sample.POJO.Attachment attach = pojo.new Attachment();
attach.setName("Attachment Name");
attach.setId("0e068652dbd9");
attach.setSize(1913558);
att.add(attach);
pojo.setAttach(att);
byte[] byyy = SerializationUtils.serialize(pojo);
System.out.println("Size of the POJO ::: "+byyy.length);
ProtoObj tc = new ProtoObj();
List<Attachment> attachList = new ArrayList<ProtoObj.Attachment>();
Attachment attach1 = tc.new Attachment();
attach1.setName("Attachment Name");
attach1.setId("0e068652dbd9");
attach1.setSize(1913558);
attachList.add(attach1);
tc.setContent("content");
tc.setAttach(attachList);
byte[] bhh = tc.getProto(tc);
System.out.println("Size of the PROTO ::: "+bhh.length);
}
}
Я использовал выше программу для вычисления размера закодированного/сериализованного объекта с использованием Protobuf и POJO. Оба объекта обрабатывают один и тот же набор данных. Но результат показывает резкую разницу в размере объекта.Как формат protobuf Google уменьшает размер объекта после его кодирования
Выход:
Size of the POJO ::: 336
Size of the PROTO ::: 82
Кроме того, я прочитал ссылку ниже, чтобы узнать, как Google Protobuf форматы влияют на размер кодируемого объекта.
https://developers.google.com/protocol-buffers/docs/encoding
Но я не могу понять. Пожалуйста, объясните мне, чтобы понять просто.
Спасибо за объяснение. Без схемы (я считаю, что она представляет имя переменной, например name, id), как они будут дифференцировать значение при де-сериализации. – Roshan
Как я уже сказал, обеим сторонам нужна схема - при сериализации я использую схему для сериализации, а когда кто-то еще десериализуется, ему нужно иметь ту же схему для десериализации. Это просто факт, что обе стороны имеют схему заранее и не получают ее с самими данными. –
. Еще одно сомнение в том, что добавление новой схемы не повлияет на старый закодированный объект, поскольку нам нужно поддерживать уникальный номер в определении прото. Я прав? – Roshan