我正在使用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。
我可以看到正在发送的类(siena.Filter或siena.Notification)的readObject()方法正在被调用,但是我不知道这是否应该发生。我知道siena方法中引发了异常,我猜这是导致InvalidObjectException的原因。
因此,问题是,siena.class.readObject()引发异常且编写不正确的问题,还是siena.class.readObject()被调用的问题?如果是后者,我将如何解决呢?
谢谢,
大卫
最佳答案
为什么只将类型从InputObjectStream中获得的内容类型转换为要传递的对象类型?一旦获得readObject,只需将其类型转换为SingledObject,就可以正常工作吗?再次抱歉,我无法完全理解。最好在这里输入一些代码。