Cum serializa un obiect care nu pune în aplicare oricare dintre interfețele de pe preaplinul serializare stivă

Alo este necesar să se serializa obiectului, astfel încât acesta implementează java.io.Serializable interfață sau java.io.Externalizable. În caz contrar, acesta va fi java.io.NotSerializableException eroare. Dar ce se întâmplă dacă am folosi biblioteci terțe părți, fără cod sursă, și am nevoie să serializam unul dintre obiectele acestei biblioteci?
Acest obiect este în clasa mea serializa (unul dintre câmpurile). Să presupunem, de asemenea, că, în acel obiect (de la a treia parte biblioteca) sunt, de asemenea, domeniul de clasă, nu de punere în aplicare oricare din interfața serializare.

set 19 octombrie '11 la ora 12:30

Evident, în cazul în care obiectele din bibliotecile terțe părți nu oferă posibilitatea de a serializa, apoi sa le serializate „nativ“ tu nu te.

Puteți rezolva această problemă într-un mod simplu - să-și încheie fiecare obiect entitate, de exemplu, EntitySerialiazbleProxy. dacă este cazul, pentru a scrie serializarea toate câmpurile necesare.

Este de asemenea posibil (această metodă este mai rău, dar are dreptul la viață), fără a face obiecte proxy, de exemplu, pur și simplu scrie serializarea manual pentru toate obiectele care folosesc obiecte din biblioteci terțe părți. Metodele corespunzătoare serializam și deserializati va trebui să copiați câmpurile dorite din obiectele în flux, sau, respectiv, pentru a construi aceste obiecte din fluxul.

O explicație mai detaliată a primei metode.

Să fie o clasă de entități:

Se înțelege că obiectele proxy de acest tip pot fi folosite oriunde în cazul în care ne-ar folosi doar entitatea obiect.

De asemenea, rețineți că, dacă există o mulțime de obiecte neserializuyuschihsya similare, aceste lucruri sunt destul de posibil să manivelă prin generice.

Pentru o mai bună înțelegere a esenței, puteți vedea următoarea discuție.