Могу ли я использовать вывод kryo на том же jvm для глубокого сравнения экземпляров одного и того же класса? - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть два экземпляра одного и того же класса, которые я хочу сравнить. Я уже использую 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 отличаются?

...