当前位置: 首页 > 面试题库 >

如何从文件反序列化到其他类

仉联
2023-03-14
问题内容

我将一个序列化为一个ArrayList<packageA.Changelog> list文件,并将该文件传输到另一台计算机上的另一个系统。

而且由于接收文件的系统是不同的,所以我没有相同的packageA.Changelog类,而是packageB.Changelog具有完全相同的结构但使用不同的包的类。

当我使用

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

从文件中读出我有一个ClassCastException

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


问题答案:

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

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

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

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

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



 类似资料:
  • 问题内容: log4j网络适配器将事件作为序列化的Java对象发送。我希望能够捕获此对象并以另一种语言(python)将其反序列化。这可能吗? 注意 网络捕获很容易;它只是一个TCP套接字并在流中读取。困难是反序列化部分 问题答案: 通常,不会。 本文档中定义了Java序列化的流格式,但是您需要访问原始类定义(以及将它们加载到Java运行时中)以将流数据转换回接近原始对象的内容。例如,类可以定义w

  • 问题内容: 我很好奇序列化和反序列化的方式。我使用关键字“ json”和“ tuple”进行搜索,但找不到所需的内容。 问题答案: 我通过和Json.net进行测试,测试代码如下。结果显示可序列化和可反序列化。因此,我可以在应用程序中使用它们。 测试代码 注释 在将序列化到字符串{“项目1”:“一”,“项目2”:“嘻嘻”,“项目3”:真正},并且它可以被反序列化回类型。

  • 问题内容: 我正在使用Xstream序列化Job对象。看起来不错。 但是反序列化,我有一个问题: 你们中的一个人以前遇到过这个问题吗? 这是我序列化的方法: 我也尝试这样做: 对于反序列化,我这样做是这样的: XML结构: 如果是,我想听听。提前致谢。 问题答案: fromXML没有文件名,请尝试: 以String形式读取文件内容。 在XStream中,字段名“ id”和“引用”也恰好是“系统属性

  • 问题内容: 如何将Kubernetes YAML文件反序列化为Go结构?我看了一下代码,但不知何故我收到了每个YAML文件的错误: 这是一个MWE: 我正在使用客户端版本。该如下所示: 这些是对以下内容的引用: https://github.com/kubernetes/kubernetes/blob/43ac38e29e6ecf83e78bc7c5d9f804310b051c95/pkg/kub

  • 我试图反序列化以下XML: 我有以下代码,可以发出POST请求并成功运行,但无法反序列化到我的类中。 但是我得到了错误 没有MediaTypeFor事可用于从具有媒体类型应用程序/xml的内容中读取类型为jobInfo的对象, 我的作业信息是使用, 为了正确地反序列化,我错过了什么? 这意味着我应该把它当作一个字符串来读: 如何使用HttpClient读取XML响应? 但这表明它应该“起作用” H

  • 问题内容: 我有以下从外部方收到的JSON字符串。 我的映射类: 现在的问题是,我不喜欢的 类名 和 字段名 的类。相反,我希望它被命名,并且还希望从字段名称中删除并提供适当的名称。 我可以重命名为,但是如果我更改了字段名(在类中),它将无法正确地反序列化并提供给我。我该如何克服呢? 问题答案: Json.NET具有允许您指定JSON属性名称的名称,因此您的代码应为: 文档: 序列化属性