如何从文件反序列化到不同的类

发布于 2024-11-28 09:08:33 字数 486 浏览 2 评论 0原文

我序列化了 ArrayList; list 到一个文件并将该文件传输到另一台机器中的另一个系统。

由于接收文件的是不同的系统,因此我没有相同的 packageA.Changelog 类,而是一个 packageB.Changelog ,它具有完全相同的结构,但在不同的包。

当我使用

ArrayList时changelogs = (ArrayList)ois.readObject();

从文件中读出,我得到了 ClassCastException

如何避免这种异常呢?我是否需要在其他系统中创建相同的包结构仅用于接收列表?

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?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

旧时光的容颜 2024-12-05 09:08:33

是的,您可以做三件事之一。

  1. 使用相同的包名称创建相同的类

  2. 创建一个接口(当然还是在两台计算机上的同一个包中)并将其传送到客户端计算机上。即使在不同的包中,所有类都可以实现此接口。例如,您的接口可以命名为 Loggable,并且它应该具有现在在 ChangeLog 类中声明的所有方法。

  3. 或者最后不使用“ChangeLog”类,而是完全避免使用它并使用默认可序列化的 HashMap。而且您不必将任何东西运送到您的客户端(其他)计算机。您将能够序列化 ArrayList 并将其转换回其他计算机上的对象。

所有实现 Loggable 类的类都可以转换为该类型。
我希望这有帮助

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

分开我的手 2024-12-05 09:08:33

我没有相同的 packageA.Changelog 类,而是一个 packageB.Changelog ,它具有完全相同的结构,但位于不同的包中。

为什么? 就是问题所在。不要那样做。

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文