Serialization BigInteger with different versions of Java produces different result
byte[] res;
try (PersistStream stream = new PersistStream()) {
stream.writeObject(new BigInteger("123"));
res = stream.toByteArray();
}
System.out.println(res.length + " bytes, hash=" + Arrays.hashCode(res));
Java 8 output:
141 bytes, hash=-1637736666
Java 11 and 17 output:
169 bytes, hash=1514769574
If BigInteger serialized with Java 8 and deserialized with Java 11
try (DeserializeStream des = new DeserializeStream(res)) {
System.out.println(des.readObject());
}
Output:
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Stream field is missed locally: int java.math.BigInteger.bitCount
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Stream field is missed locally: int java.math.BigInteger.bitLength
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Stream field is missed locally: int java.math.BigInteger.lowestSetBit
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Stream field is missed locally: int java.math.BigInteger.firstNonzeroIntNum
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Local field is missed in stream: int java.math.BigInteger.bitCountPlusOne
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Local field is missed in stream: int java.math.BigInteger.bitLengthPlusOne
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Local field is missed in stream: int java.math.BigInteger.lowestSetBitPlusTwo
Jul 15, 2022 4:14:09 PM one.nio.serial.Repository logFieldMismatch
WARNING: [1b5f8d93540f6312] Local field is missed in stream: int java.math.BigInteger.firstNonzeroIntNumPlusTwo
123
If vice versa
Output:
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Stream field is missed locally: int java.math.BigInteger.bitCountPlusOne
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Stream field is missed locally: int java.math.BigInteger.bitLengthPlusOne
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Stream field is missed locally: int java.math.BigInteger.lowestSetBitPlusTwo
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Stream field is missed locally: int java.math.BigInteger.firstNonzeroIntNumPlusTwo
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Local field is missed in stream: int java.math.BigInteger.bitCount
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Local field is missed in stream: int java.math.BigInteger.bitLength
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Local field is missed in stream: int java.math.BigInteger.lowestSetBit
Jul 15, 2022 4:14:59 PM one.nio.serial.Repository logFieldMismatch
WARNING: [4b1f962d58472cfa] Local field is missed in stream: int java.math.BigInteger.firstNonzeroIntNum
123