[英]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.