java - 使用多个版本的序列化器类处理 Java 自定义序列化?

标签 java serialization

我有一个在 HDF5 或 NetCDF 之上实现的自定义数据存储格式。我的数据格式偶尔会发生变化(但很少),并且以后能够读取“旧”文件非常重要。

我一直在使用 C++ 和 Microsoft COM,但放弃了这些工具包,转而使用 Java。在我的 COM 时代,我可以将数据格式读取器的 CLSID 放在数据文件中一个众所周知的位置,这样,如果该文件的格式比我的默认文件读取器实现旧(或新),我可以如果我的计算机上安装了正确的实现,则实例化它。每当我升级文件格式时,我都会发布一个具有相同基本界面但有新 CLSID 的新阅读器。

在 Java 中是否有等效的方法来执行此操作?

编辑:注意 - 我不想序列化数据文件本身中的 Java 对象实现,我只是想要一种在反序列化时查找正确的类文件的方法。我不确定这是否意味着每次升级文件格式时都必须使用版本号更改包名称,或者我是否可以在每个版本中使用相同的类名(例如 com.example.customreader),使用一些标记(例如serialVersionUID)或注释来区分相关版本。如果我可以将多个版本的 jar 文件放入我的类路径中,我更喜欢后一种方法。

编辑2:我的数据存储方式与ObjectInputStreamSerialized无关,而且我没有计划这样做所以除非有一些优势。我自己处理读/写,并且由于HDF5/NetCDF的特性/特性,它不仅仅是处理ObjectInputStream那么简单。

最佳答案

我不熟悉 COM,但您可能想查看 serialVersionUID 的文档 - 这是设计用于在序列化发生更改时进行修改的。

关于java - 使用多个版本的序列化器类处理 Java 自定义序列化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1075247/

相关文章:

Django REST Framework - 对嵌套序列化程序的查询限制?

java - 如何在 Android 中更改 Activity 时停止 MediaPlayer

Java SQL : syntax error encountered at line xx column xx

java - Dalvik 到 Java SE 的通信

c# - 将不可序列化的类转换为字节数组

c# - 托管 UserControl 设计器的 ToolStripControlHost 不会发生序列化

c++ - 使用 QDataStream 序列化自定义类导致 C2679 错误

java - 高尔顿箱;打印直方图

java - 从java类导入值到jsp

java react 堆filterAndMap?