简体   繁体   English

处理readObject时出现EOFException

[英]EOFException when dealing with readObject

I am trying to de-serialize an object from a file, but when I do I get the following stack trace: 我正在尝试从文件中反序列化对象,但是当我这样做时,得到以下堆栈跟踪:

21.04 10:33:18 [Server] WARN at java.lang.Thread.run(Unknown Source)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.MinecraftServer.run(MinecraftServer.java:537)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.MinecraftServer.y(MinecraftServer.java:634)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.DedicatedServer.z(DedicatedServer.java:316)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.MinecraftServer.z(MinecraftServer.java:696)
21.04 10:33:18 [Server] WARN at java.util.concurrent.FutureTask.run(Unknown Source)
21.04 10:33:18 [Server] WARN at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.PacketHandleTask.run(SourceFile:13)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:53)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.PacketPlayInChat.a(PacketPlayInChat.java:26)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.PlayerConnection.a(PlayerConnection.java:950)
21.04 10:33:18 [Server] WARN at net.minecraft.server.v1_8_R1.PlayerConnection.handleCommand(PlayerConnection.java:1115)
21.04 10:33:18 [Server] WARN at org.bukkit.craftbukkit.v1_8_R1.CraftServer.dispatchCommand(CraftServer.java:646)
21.04 10:33:18 [Server] WARN at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
21.04 10:33:18 [Server] WARN at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44)
21.04 10:33:18 [Server] WARN at me.trevor1134.squads.SquadExecutor.onCommand(SquadExecutor.java:47)
21.04 10:33:18 [Server] WARN at me.trevor1134.squads.command.SquadCommand.onCommand(SquadCommand.java:32)
21.04 10:33:18 [Server] WARN at me.trevor1134.squads.command.CreateCommand.run(CreateCommand.java:24)
21.04 10:33:18 [Server] WARN at me.trevor1134.squads.Squadron.isSquad(Squadron.java:45)
21.04 10:33:18 [Server] WARN at me.trevor1134.squads.SquadWriter.isSquad(SquadWriter.java:43)
21.04 10:33:18 [Server] WARN at me.trevor1134.squads.SquadWriter.getSquad(SquadWriter.java:33)
21.04 10:33:18 [Server] WARN at java.io.ObjectInputStream.readObject(Unknown Source)
21.04 10:33:18 [Server] WARN at java.io.ObjectInputStream.readObject0(Unknown Source)
21.04 10:33:18 [Server] WARN at java.io.ObjectInputStream$BlockDataInputStream.peekByte(Unknown Source)
21.04 10:33:18 [Server] WARN java.io.EOFException

I looked at the error-causing code and found this: 我查看了导致错误的代码,发现了这一点:

(isSquad): (isSquad):

public static boolean isSquad(String squad) {
try {
return getSquad(squad) != null; // Line 43
} catch (ClassNotFoundException | IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;

} } }}

(getSquad): (getSquad):

public static Squad getSquad(String squad) throws ClassNotFoundException, FileNotFoundException, IOException {
    File f = new File("plugins/Squadron/Squads/" + squad + ".dat");
    if (!f.exists()) {
        return null;
    }

    ObjectInputStream in = new ObjectInputStream(new FileInputStream(f));
    if (in.readObject() instanceof Squad) {
        Squad s = (Squad) in.readObject(); //Line 33
        in.close();
        return s;
    }
    in.close();
    return null;
}

I don't understand the issue because the file is created and immediately serialized with a squad object. 我不明白这个问题,因为该文件已创建并立即使用小队对象进行序列化。

Your problem is that you are calling readObject twice, when you only have one object to read. 您的问题是只有一个对象要读取时,您两次调用readObject

You need to change this if-block : 您需要更改此if-block

if (in.readObject() instanceof Squad) {
    Squad s = (Squad) in.readObject(); //Line 33
    in.close();
    return s;
}

to something like this: 像这样:

Object readObject = in.readObject();
if (readObject instanceof Squad) {
    Squad s = (Squad) readObject; //Line 33
    in.close();
    return s;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM