Yes - this is good desicion. Thanks!
But I already have searialized objects - I forgot to put the version field,
although I had seen this method already :-((

----- Original Message -----
From: "Lesden, Kim" <[EMAIL PROTECTED]>
To: "JDJList" <[EMAIL PROTECTED]>
Sent: Monday, August 26, 2002 2:45 PM
Subject: [jdjlist] AW: problem with serizlization


> Hello Zlatko,
>
> a simple way would be to store a version attribute before you store
anything else. That way you can also easily migrate old data on the fly. I
have seen this work very well in C++. However, if you have lots of data and
complex version migrations (v1->v2, v2->v3, ...) this will cost you lots of
extra cpu. (see sample below)
>
> Regards
> Kim
>
> /**
>   * Version 1:
>   */
> class A {
>   private static final int version = 1;
>   private ArrayList data = new ArrayList();
>
>     private void writeObject(ObjectOutputStream ous) throws IOException {
>         out.writeObject(version);
>         out.writeObject(data);
>     }
>
>     private void readObject(ObjectInputStream ois) throws IOException,
> ClassNotFoundException {
>         version = out.readObject();
>         if ( 1 == version ) {
>           data = out.readObject();
>         }
>     }
> }
>
> /**
>   * Version 2:
>   */
> class A {
>     private static final int version = 2;
>     private ArrayList data = new ArrayList();
>     private String name = "name";
>
>     private void writeObject(ObjectOutputStream ous) throws IOException {
>         out.writeObject(version);
>         out.writeObject(data);
>         out.writeObject(name);
>     }
>
>     private void readObject(ObjectInputStream ois) throws IOException,
> ClassNotFoundException {
>         version = out.readObject();
>         data = out.readObject();
>         if (version > 1) {
>           name = out.readObject();
>         }
>         else {
>            /* convert version 1 data to meaningful version 2 or throw
exception */
>            name = "none";
>         }
>     }
> }
>
> /**
>   * Version 3:
>   */
> class A {
>     private static final int version = 3;
>     private ArrayList data = new ArrayList();
>     private String name = "name";
>     private int age = 0;
>
>     private void writeObject(ObjectOutputStream ous) throws IOException {
>         out.writeObject(version);
>         out.writeObject(data);
>         out.writeObject(name);
>         out.writeObject(age);
>     }
>
>     private void readObject(ObjectInputStream ois) throws IOException,
> ClassNotFoundException {
>         version = out.readObject();
>          data = out.readObject();
>         if (version > 1) {
>           name = out.readObject();
>         }
>         else {
>            /* convert version 1 data to meaningful version 2 or throw
exception */
>            name = "name";
>         }
>         if (version > 2) {
>           age = out.readObject();
>         }
>         else {
>            /* convert version 2 data to meaningful version 3 or throw
exception */
>            age = 0;
>         }
>     }
> }
>
>
> -----Ursprungliche Nachricht-----
> Von: Zlatko Kostadinov [mailto:[EMAIL PROTECTED]]
> Gesendet: Montag, 26. August 2002 13:14
> An: JDJList
> Betreff: [jdjlist] problem with serizlization
>
>
> Hi guys
>
> I had serizlized objects in this way:
>
> class A {
>     private ArrayList data = new ArrayList();
>
>     private void writeObject(ObjectOutputStream ous) throws IOException {
>         out.writeObject(data);
>     }
>
>     private void readObject(ObjectInputStream ois) throws IOException,
> ClassNotFoundException {
>         data = out.readObject();
>     }
> }
>
> And my program now works with objects of this type. I want to add new
field
> in the class so the class will be
>
> class A {
>     private ArrayList data = new ArrayList();
>     private name = "name";
>
>     private void writeObject(ObjectOutputStream ous) throws IOException {
>         out.writeObject(data);
>         out.writeObject(name);
>     }
>
>     private void readObject(ObjectInputStream ois) throws IOException,
> ClassNotFoundException {
>         data = out.readObject();
>         // here is the problem - how to determine is this an instance of
the
> new version or no.
>         // must I read the name or not.
>     }
> }
>
> Any ideas are wellcome
> Regards
> Zlatko
>
>
> To change your JDJList options, please visit:
http://www.sys-con.com/java/list.cfm
>
> To change your JDJList options, please visit:
http://www.sys-con.com/java/list.cfm
>


To change your JDJList options, please visit: http://www.sys-con.com/java/list.cfm

Reply via email to