Java 读取对象时发生EOFEException
在Java中,当我试图通过服务器套接字发送对象时,会收到一个EOFEException 这是发送部分的代码:Java 读取对象时发生EOFEException,java,exception,networking,serialization,Java,Exception,Networking,Serialization,在Java中,当我试图通过服务器套接字发送对象时,会收到一个EOFEException 这是发送部分的代码: public static void sendObject(Object Object, InetAddress IP, int Port){ try{ Socket receivingSocket = new Socket(IP, Port); OutputStream OS = receivingSocket.getOutputStream()
public static void sendObject(Object Object, InetAddress IP, int Port){
try{
Socket receivingSocket = new Socket(IP, Port);
OutputStream OS = receivingSocket.getOutputStream();
ObjectOutputStream OOS = new ObjectOutputStream(OS);
OOS.writeObject(Object);
OOS.close();
OS.close();
receivingSocket.close();
}
catch(Exception e){
System.err.println("Failed to send object to: " + IP + " on port: " + Port);
System.err.println(e);
}
}
我试着将对象投射到特定对象,但没有成功。
问题实际上出现在接收端,如下所示:
public Downloader(int PortStart, int PortStop, Loading_State loading_state){
this.loading_state = loading_state;
for(int i = PortStart;i<PortStop;i++){
try {
SS = new ServerSocket(i);
break;
}
catch (Exception e) {
e.printStackTrace();
}
}
}
public void run(){
try {
S = SS.accept();
IS = S.getInputStream();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
while(!destroy){
while(active){
try {
OIS = new ObjectInputStream(IS);
Character Char = (Character)OIS.readObject();
loading_state.setChar(Char);
pause();
}
catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
大编辑!:
我不知道为什么或如何,但我认为下载工作,但现在它无法将接收到的对象转换到我的对象
Character Char = (Character)OIS.readObject();
java.lang.ClassCastException: server.database.account.Character cannot be cast to database.Character
你知道为什么吗?你的对象是可序列化的吗?对象应实现可序列化接口:
class MyClass implements Serializable {
}
对象是否可序列化?对象应实现可序列化接口:
class MyClass implements Serializable {
}
您只发送了一个对象,但循环时希望读取多个对象。那没有道理。发送多个对象或仅读取一个对象。如果发送和读取多个对象,则在读取比已发送多个对象的对象时,始终会收到EOFEException。您只发送了一个对象,但循环时希望读取多个对象。那没有道理。发送多个对象或仅读取一个对象。如果您发送和读取多个对象,当您读取的对象比发送的对象多一个时,您将始终收到EOFEException。两件事
谢谢你的帮助 你看过这个问题吗?别忘了刷新输出流。
Object对象
rahhhh!!!刷新输出流没有帮助:(java.io.ObjectInputStream处出现异常。上游似乎有问题。您看过这个问题了吗?别忘了刷新输出流。Object Object
rahhhh!!!刷新输出流没有帮助:(java.io.ObjectInputStream出现异常。在上游似乎有问题。我们来看看堆栈溢出!这实际上是一个注释,而不是答案。再重复一点,。目前我已经为您添加了注释,我正在标记此帖子以供删除。如果这是问题,他在发送时将收到NotSerializableException。这是一个EOFExcep。)收到时出现异常。-1欢迎使用Stack Overflow!这实际上是一个评论,不是一个答案。需要更多的代表性。目前,我已经为您添加了评论,我正在标记此帖子以删除。如果这是问题,他在发送时会收到NotSerializableException。这是接收时出现的EOFEException。-1我应该解释更多。在收到对象后,它会暂停下载程序,然后再传输对象,然后继续下载另一个对象。您发布的代码有我描述的缺陷。您的新代码还有其他缺陷。首先,您需要为每个接受的连接启动一个新线程。我应该解释更多。收到对象后,它会暂停下载在传输对象然后继续下载另一个对象之前加载。您发布的代码有我描述的缺陷。您的新代码有其他缺陷。您需要为每个接受的连接启动一个新线程。如果(IS!=null&&IS.available()>0)在好几次中只有一次是正确的,它抛出了一个例外,可用()的正确用法很少,而这不是其中之一。所有这一切只是忽略尚未写入对象的流。并且也会泄漏它们。如果客户端稍后发送某些内容,它将丢失。而且“is”永远不能为null,因此对它的测试毫无意义。-1if(is!=null&&is.available()>0)在好几次中只有一次是正确的,它抛出了一个例外,可用()的正确用法很少,而这不是其中之一。所有这一切都是忽略尚未写入对象的流。并且也会泄漏它们。如果客户端稍后发送某个内容,它将丢失。而且“is”永远不能为null,因此对其进行测试是毫无意义的。-1更改计时不会影响异常。您必须已修复其他内容,如中指出的问题我的答案。EOFEException不受更改时间的影响。您必须已修复其他问题,例如我的答案中指出的问题。
class MyClass implements Serializable {
}
while(!destroy){
while(active){
try{
S = SS.accept();
IS = S.getInputStream();
if(IS!=null && IS.available()>0){
OIS = new ObjectInputStream(IS);
Character Char = (Character)OIS.readObject();
loading_state.setChar(Char);
pause();
}
}
catch(Exception e){ ..}
}
}