[英]EOFException when dealing with readObject
我正在嘗試從文件中反序列化對象,但是當我這樣做時,得到以下堆棧跟蹤:
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
我查看了導致錯誤的代碼,發現了這一點:
(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):
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;
}
我不明白這個問題,因為該文件已創建並立即使用小隊對象進行序列化。
您的問題是只有一個對象要讀取時,您兩次調用readObject
。
您需要更改此if-block
:
if (in.readObject() instanceof Squad) {
Squad s = (Squad) in.readObject(); //Line 33
in.close();
return s;
}
像這樣:
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.