У меня есть два экземпляра одного и того же класса, которые я хочу сравнить. Я уже использую kryo для сериализации и отправки его в БД.
Мне было интересно, могу ли я сравнить оба байта [], созданные Kryo (конфигурация по умолчанию), и определить, одинаковы ли они и нет?
Я запустил следующий код, и он, кажется, работает нормально. Нужен дебют от экспертов.
private static void testKryoCompare() {
//KryoUtil is just a utility wrapper on Kryo. Nothing special there.
int n = 1000_000;
long start;
for(int i=0;i<n;i++) {
byte[] b1 = KryoUtil.serialize(job);
job.setParam1(i+"");
byte[] b2 = KryoUtil.serialize(job);
if(Arrays.equals(b1, b2) == true)
System.out.println("Should not be true: "+job.getParam1());
}
for(int i=0;i<n;i++) {
job.setParam1(UUID.randomUUID().toString());
byte[] b1 = KryoUtil.serialize(job);
byte[] b2 = KryoUtil.serialize(job);
if(Arrays.equals(b1, b2)==false)
System.out.println("Should not be false: "+job.getParam1());
}
}
EDIT
Оба экземпляра относятся к одному и тому же классу - Job.class. Нет структуры изменения поля. В случае, если одним полем является List <>, то один экземпляр может иметь ArrayList, а другой - LinkedList. Крио выход может быть другим в этом случае.
Мой вариант использования - уменьшить количество сетевых вызовов и волновой эффект. Если некоторые вызовы проскальзывают даже при одинаковых значениях, это нормально. Исходя из этого, я перефразирую свой вопрос ниже:
Вопрос : Будет ли сценарий, в котором вывод крио будет одинаковым, даже если значения в Job.class отличаются?