gpt4 book ai didi

java - 序列化反序列化对象 EOFException

转载 作者:行者123 更新时间:2023-11-30 04:11:49 25 4
gpt4 key购买 nike

我在反序列化对象时遇到此异常:

控制台输出

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);
}

另一边:

else if(req.compareTo("GET_OBJS")==0){
Environement env=(Environement) ctx.getService(ctx.getServiceReference(Environement.class.getName()));
ByteArrayOutputStream baos=new ByteArrayOutputStream();
ObjectOutputStream out=new ObjectOutputStream(baos);
out.writeObject(env.getObjects());
out.close();
buf=baos.toByteArray();

resp="buffer_ready";
}

其中 env.getObjects() 返回“Objects 和 Objects 是一个可序列化类的 LinkedList”。

有什么问题吗?

最佳答案

我已经修改了代码以使用 tcp 套接字,现在我没有收到异常。

修改后的代码:

从我调用的java小程序:

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");
}

另一边:

else if(req.compareTo("GET_OBJS")==0){
Environement env=(Environement) ctx.getService(ctx.getServiceReference(Environement.class.getName()));
ObjectOutputStream out=new ObjectOutputStream(clientSock.getOutputStream());
out.flush();
out.writeObject(env.getObjects());
out.flush();
resp="buffer_ready";
}

现在可以了!谢谢你的帮助!

PS:ObjectOutputStream 在开始写入之前必须调用flush()。

关于java - 序列化反序列化对象 EOFException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19432030/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com