> De: "Chris Hegarty" <[email protected]> > À: "Remi Forax" <[email protected]> > Cc: "amber-spec-experts" <[email protected]>, "amber-dev" > <[email protected]> > Envoyé: Dimanche 28 Février 2021 17:42:41 > Objet: Re: Deserialization of a linked list of records
> [resending; in an effort to produce a less garbled version] > Remi, >>> On 26 Feb 2021, at 22:06, Remi Forax < [ mailto:[email protected] | >> > [email protected] ] > wrote: >>>[sent to both email list given it's not clear if it's an implementation >>>issue or >> >a spec issue] >>>There is a nice video of how the serialization of records works recently on >> >inside.java >>> [ https://inside.java/2021/02/23/records-met-serialization/ | >> > https://inside.java/2021/02/23/records-met-serialization/ ] > Yes, this is a nice explanation of how record serialization works. >>> In the video, Julia explains that the de-serialization works from >>> bottom-up, so >> > what if the record instances are a linked list … >> > answer: a stack overflow. > This reproducer fails on my machine with a StackOveflowException when > serializing ( not de-serializing ). > It fails with: > Exception in thread "main" java.lang.StackOverflowError > at > java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1142) > at > java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577) > at > java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1534) > at > java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1443) > at > java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1186) > at > java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577) > at > java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1534) > at > java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1443) > at > java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1186) > at > java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577) > at > java.base/java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1534) > at > java.base/java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1443) > at > java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1186) > at > java.base/java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1577) > ... > The same is true if Link is a normal class ( not a record class ). oops, yes, you are right ! > Records and normal classes share the same code path in OOS when serializing. exact, i now remember that i have reviewed the code that introduces the serialization of records, sorry for the noise. > -Chris. Rémi
