1

我正在使用名为 easyChart 的 objectPlanet 的第 3 方工具来生成图形图表。他们提供了一个名为 Chart.jar 和 ChartServer.jar 的 jar 库

我在服务器端写了一个easyChart对象:

Chart chart = new BarChart();
... <create chart data here> ...
ByteArrayOutputStream bStream = new ByteArrayOutputStream();
ObjectOutputStream oStream = new ObjectOutputStream( bStream );
oStream.writeObject (chart);
byte[] byteVal = bStream.toByteArray();
String chartInString = Base64.encode(byteVal);

并在客户端读回:

byte[] readByte = Base64.decode(chartInString);
ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(readByte));
Chart chart = (Chart) ois.readObject();

当服务器和客户端具有相同的 JVM 版本时,它可以正常工作。我意识到 GenericChart 实现了序列化(这个类在提供的 jar 中)。

既然我无法修改他们提供的 jar 类,我该如何克服这个问题?

非常感谢任何答复。谢谢!

4

2 回答 2

1

存在的每个 Swing 类的 Javadoc 类中都有一个警告,即序列化版本将与其他 JDK 版本不兼容。所以,不要序列化它们。序列化模型。

于 2013-02-18T12:32:34.207 回答
1

我无法读取 Chart 对象,它抛出了这个异常: java.io.InvalidClassException: javax.swing.JComponent; 本地类不兼容:流 classdesc serialVersionUID = -1030230214076481435,本地类 serialVersionUID = 5670834184508236790

实际上,这与 JVM 版本无关,而与运行时库有关。该类javax.swing.JComponent的更改方式使串行表示不兼容。

恐怕除了使用相同的版本之外,您无能为力。

于 2013-02-18T09:45:01.413 回答