【发布时间】:2011-03-29 08:51:43
【问题描述】:
我正在尝试通过专用通信包将包中的对象发送到其他框架。对于通信,我使用基于 TCP/IP 的 Java 标准序列化(使用 ObjectStreams)。
通信流程如下:发送者捆绑包将可序列化对象传递给发送发送者,发送发送者将序列化对象并通过 TCP/IP 将它们发送到发送接收者。接收器然后将反序列化接收到的对象并将它们传递给接收器包。
由于 OSGi 类加载架构与原生架构不同,我必须对类加载器进行一些小技巧:因为我假设接收器捆绑包应该知道他接收到的类(= 已将它们导入或以其他方式访问它的类加载器),我使用接收器的类加载器而不是发送接收器来加载类。 (通过 Bundle.loadClass(..) 方法)。 这适用于自定义类,但是,这不适用于自定义类型的数组。 (对于发送-接收类加载器,但对于接收包,它们是不知道的。)
编辑: ObjectInputStream.readObject(...) 如果尝试反序列化数组,则会抛出 ClassNotFoundException。 (我假设这个异常源自接收器捆绑包的 Bundle.loadClass(...) 方法。)
它确实适用于 java.util.List 或其他 Serializable 类。它也适用于包含其他自定义类型字段的自定义类型,只要它们不是数组即可。
所以问题是:数组反序列化/序列化的方式有什么不同吗?还是它们的加载方式不同?
【问题讨论】:
标签: java serialization osgi classloader