Java 序列化反序列化对象EOFEException
我在反序列化对象时遇到此异常: 控制台上的输出Java 序列化反序列化对象EOFEException,java,serialization,Java,Serialization,我在反序列化对象时遇到此异常: 控制台上的输出 sending request: GET_OBJS java.io.EOFException receiving response at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source) at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(Unknown Source) at java.io.
sending request: GET_OBJS
java.io.EOFException
receiving response
at java.io.ObjectInputStream$PeekInputStream.readFully(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readUTFBody(Unknown Source)
at java.io.ObjectInputStream$BlockDataInputStream.readUTF(Unknown Source)
at java.io.ObjectInputStream.readUTF(Unknown Source)
at java.io.ObjectStreamClass.readNonProxy(Unknown Source)
at java.io.ObjectInputStream.readClassDescriptor(Unknown Source)
at java.io.ObjectInputStream.readNonProxyDesc(Unknown Source)
at java.io.ObjectInputStream.readClassDesc(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at thesis.bot.wab.applet.DApplet.extracted(DApplet.java:218)
我正在尝试在不使用文件的情况下反序列化对象。该对象使用DatagramSocket发送
我从java小程序调用:
sendPacket("GET_OBJS");
[...]
input=new ObjectInputStream(new ByteArrayInputStream(receivedPacket.getData()));
objs=extracted(input);
toWrite=Integer.toString(objs.size());
input.close();
sendPacket("PRINT_"+toWrite);
[...]
private LinkedList<Objects> extracted(ObjectInputStream obj)
throws IOException, ClassNotFoundException {
return (LinkedList<Objects>) obj.readObject();
}
private void sendPacket(String msg) throws IOException{
System.out.println("sending request: "+msg);
buf=msg.getBytes();
DatagramPacket tosend=new DatagramPacket(buf,buf.length,addr,9999);
socket.send(tosend);
}
sendPacket("GET_OBJS");
[...]
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
objs=extracted(ois);
System.out.println(objs.size());
[...]
private LinkedList<Objects> extracted(ObjectInputStream ois)
throws IOException, ClassNotFoundException {
return (LinkedList<Objects>) ois.readObject();
}
private void sendPacket(String msg) throws IOException{
bw.write(msg);
bw.newLine();
bw.flush();
System.out.println("Message sent");
}
其中env.getObjects()返回“对象”的LinkedList,并且对象是可序列化的类
有什么问题吗?我已经修改了使用tcp套接字的代码,现在我没有收到异常 修改代码: 我从java小程序调用:
sendPacket("GET_OBJS");
[...]
input=new ObjectInputStream(new ByteArrayInputStream(receivedPacket.getData()));
objs=extracted(input);
toWrite=Integer.toString(objs.size());
input.close();
sendPacket("PRINT_"+toWrite);
[...]
private LinkedList<Objects> extracted(ObjectInputStream obj)
throws IOException, ClassNotFoundException {
return (LinkedList<Objects>) obj.readObject();
}
private void sendPacket(String msg) throws IOException{
System.out.println("sending request: "+msg);
buf=msg.getBytes();
DatagramPacket tosend=new DatagramPacket(buf,buf.length,addr,9999);
socket.send(tosend);
}
sendPacket("GET_OBJS");
[...]
ObjectInputStream ois=new ObjectInputStream(socket.getInputStream());
objs=extracted(ois);
System.out.println(objs.size());
[...]
private LinkedList<Objects> extracted(ObjectInputStream ois)
throws IOException, ClassNotFoundException {
return (LinkedList<Objects>) ois.readObject();
}
private void sendPacket(String msg) throws IOException{
bw.write(msg);
bw.newLine();
bw.flush();
System.out.println("Message sent");
}
现在它工作了!
谢谢你的帮助
PS:ObjectOutputStream调用flush()是必需的开始写入之前。数据报不能保证到达其目的地,只能尝试。为什么不使用TCP?您可以看到此相关帖子。最可能的原因是数据流已被截断。@SJuan76 u是正确的:)我正在更改代码以使用TCP套接字。稍后我将更新帖子