1

我正在使用 ObjectInputStream 通过 TCP 连接发送封装在 SignedObject 中的 Message 对象中的对象。这是基本代码:

发送

Object data = someObject;
ObjectOutputStream = new ObjectOutputStream(socket.getOutputStream());
Message newMsg = new Message(data);
out.writeObject(security.signObject(newMsg,privKey));

收到

ObjectInputStream in = new ObjectInputStream(socket.getInputStream());
Object line = in.readObject();
SignedObject messageIn = (SignedObject) line;
Message msg = (Message) messageIn.getObject();

Message 类是一个基本类,只有字段,没有方法。其中一个字段是 Object Message.data,在本例中包含 siena.Filter 或 siena.Notification。当我调用 SignedObject.getObject() 时,我得到一个 InvalidObjectException。堆栈跟踪如下。

java.io.InvalidObjectException: siena.SENPInvalidFormat
at siena.Filter.readObject(Filter.java:127)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at java.io.ObjectStreamClass.invokeReadObject(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.defaultReadFields(Unknown Source)
at java.io.ObjectInputStream.readSerialData(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at java.security.SignedObject.getObject(Unknown Source)

消息传输的代码是正确的。它适用于其他类的许多其他情况,甚至适用于同一类的其他版本。它不适用于特定版本的 siena.Filter 和 siena.Notification。

我可以看到正在发送的类的 readObject() 方法(siena.Filter 或 siena.Notification)正在被调用,但我不知道这是否应该发生。我知道在 siena 方法中抛出了一个异常,我猜这会导致 InvalidObjectException。

所以问题是,是 siena.class.readObject() 抛出异常并且没有正确写入的问题,还是 siena.class.readObject() 被调用的问题?如果是后者,我将如何解决这个问题?

谢谢,大卫

4

1 回答 1

0

为什么你只是将你从 InputObjectStream 中得到的东西类型转换为你传递的对象类型?获得 readObject 后,只需将其类型转换为 SingledObject,应该可以吗?再次抱歉,我无法完全理解。最好在这里输入一些代码。

于 2012-07-31T18:51:28.177 回答