我正在使用名为easyChart的objectPlanet的第三方工具来生成图形图表。他们提供了一个名为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类,如何解决此问题?

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

最佳答案

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


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

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

关于java - 使用不同JVM版本的Java序列化,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14933149/

10-09 09:48