How to deserialize from a file to different class

2019-02-17 09:55发布

问题:

I serialize a ArrayList<packageA.Changelog> list to a file and transmitted the file to another system in another machine.

And since it's a different system that received the file, I don't have the same packageA.Changelog class, instead is a packageB.Changelog which has exactly same structure but in different package.

And when I use

ArrayList<packageB.Changelog> changelogs = (ArrayList<packageB.Changelog>)ois.readObject();

to read out from the file I got a ClassCastException.

How to avoid this exception? Do I need to create the same package structure in the other system only for receiving the list?

回答1:

Yes, there are one of the three things you can do.

  1. Create the same class with the same package name

  2. Create an interface(ofcourse again in the same package on both the machines) and ship it on client machines. All your classes can implement this interface even in different packages. For example, your interface can be named Loggable and it should have all the methods declared which are in ChangeLog class right now.

  3. Or finally instead of using the class "ChangeLog" just completely avoid using it and use a HashMap instead which is serializable by default. And you will not have to ship anything to your client(other) machine. You will be able to serialize ArrayList and convert it back to object on other machine.

All the Classes which implement class Loggable can then cast to that type. I hope this helps



回答2:

I don't have the same packageA.Changelog class, instead is a packageB.Changelog which has exactly same structure but in different package.

Why? This is the problem. Don't do that.