我使用ObjectInputStream通过TCP连接发送一个封装在SignedObject中的消息对象中的对象。下面是基本代码:
发送
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()被调用了呢?如果是后者,我该如何修复它呢?
谢谢,大卫
发布于 2012-08-01 02:51:28
一旦你得到了readObject,只需将其类型转换为你的SingledObject,应该可以吗?再次抱歉,我无法完全理解。你最好在这里输入一些代码。
https://stackoverflow.com/questions/11619254
复制相似问题