java - Java反序列化文件中的对象列表为空
问题描述
您好,我在将对象列表序列化到控制台中没有抛出任何错误的文件时遇到问题,因此我认为它工作正常。但是,当我尝试从这些文件中反序列化列表时,我返回的列表对于三个列表中的两个为空。
public static boolean Serialize(Object object,String Directory)
{
boolean works = false;
try
{
File outFile = new File(Main.pluginDirectory.getAbsolutePath(),Directory);
if(outFile.exists()&&outFile.isFile())
{
}
else if(!outFile.exists())
{
outFile.createNewFile();
}
FileOutputStream file = new FileOutputStream(outFile);
ObjectOutputStream out = new ObjectOutputStream(file);
out.writeObject(object);
out.close();
file.close();
works = true;
}
catch(Exception e)
{
works = false;
}
return works;
}
public static Object Deserialize(String Directory)
{
Object rObject = null;
try
{
File file = new File(Main.pluginDirectory.getAbsolutePath(),Directory);
if(file.exists()&&file.isFile())
{
Utils.Log(ChatColor.GREEN+"File Exists");
}
else if(!file.exists())
{
file.createNewFile();
Utils.Log(ChatColor.RED+"File at "+file.getAbsolutePath()+" Didn't Exist, Created New File");
}
FileInputStream filez = new FileInputStream(file);
ObjectInputStream out = new ObjectInputStream(filez);
rObject = out.readObject();
out.close();
filez.close();
}
catch(Exception e)
{
}
return rObject;
}
这些是我用来序列化和序列化对象的函数。
public static void LoadSect()
{
List<LotrSect> sects =(List<LotrSect>)Utils.Deserialize(sectFile);
if(sects==null)
{
Utils.Log(ChatColor.RED+"Null list loaded from file - sect.bin");
}
else
{
Utils.Log(ChatColor.GOLD+"Loaded "+sects.size()+" Sects");
SectManager.setList(sects);
}
}
public static void LoadFactions()
{
List<LotrFaction> factions = (List<LotrFaction>)Utils.Deserialize(lFactionFile);
if(factions==null)
{
Utils.Log(ChatColor.RED+"Null list loaded from file - faction.bin");
}
else
{
Utils.Log(ChatColor.GOLD+"Loaded "+factions.size()+" Factions");
FactionManager.setList(factions);
}
}
public static void loadFPlayer()
{
List<LotrFPlayer> players = (List<LotrFPlayer>)Utils.Deserialize(lFPlayerFile);
if(players == null)
{
Utils.Log(ChatColor.RED+"Null list loaded from file - player.bin");
}
else
{
Utils.Log(ChatColor.GOLD+"Loaded "+players.size()+" Players");
LotrFPlayerManager.setLotrFPlayers(players);
}
}
这些是我用来加载列表的功能。
public static void saveSect()
{
for (LotrSect sect : SectManager.getList())
{
Utils.Log(ChatColor.GREEN+"Saving Sect: "+sect.getSect());
}
Utils.Serialize(SectManager.getList(), sectFile);
Utils.Log(ChatColor.GREEN+"Saved "+SectManager.getList().size()+" Sects");
}
public static void saveFactions()
{
for (LotrFaction fac : FactionManager.getList())
{
Utils.Log(ChatColor.GREEN+"Saving Faction: "+fac.getFaction().getTag());
}
Utils.Serialize(FactionManager.getList(), factionFile);
Utils.Log(ChatColor.GREEN+"Saved "+FactionManager.getList().size()+" factions");
}
public static void saveFPlayer()
{
for(LotrFPlayer player : LotrFPlayerManager.getLotrFPlayers())
{
Utils.Log(ChatColor.GREEN+"Saving Player: "+player.getFPlayer().getPlayer().getName());
}
Utils.Serialize(LotrFPlayerManager.getLotrFPlayers(), fPlayerFile);
Utils.Log(ChatColor.GREEN+"Saved "+LotrFPlayerManager.getLotrFPlayers().size()+" Players");
}
这些是用于保存数据的函数。下面将包括我正在序列化/反序列化的列表中的三类对象。
package me.Ravi.Lotr;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
import me.Ravi.Lotr.LotrFaction.LotrSectEnum;
public class LotrSect implements Serializable
{
private static final long serialVersionUID = 1L;
LotrSectEnum sect;
Location Capital;
String CapitalName;
boolean isCapitalUnderAttack = false;
int reinforcementAmount = 0;
public List<War> wars = new ArrayList<War>();
public List<LotrFaction> factions = new ArrayList<LotrFaction>();
public List<LotrFPlayer> players = new ArrayList<LotrFPlayer>();
public LotrSect(Location Capital, LotrSectEnum sect)
{
this.sect = sect;
this.Capital = Capital;
}
public void setReinforcements(int amount)
{
if(isCapitalUnderAttack)
{
reinforcementAmount = amount;
}
}
public int getReinforcements()
{
return reinforcementAmount;
}
public LotrSectEnum getSect()
{
return sect;
}
public Location getCapital()
{
return Capital;
}
public void setXpBoost()
{
}
public void addFaction(LotrFaction faction)
{
factions.add(faction);
}
public void removeFaction(LotrFaction faction)
{
factions.remove(faction);
}
}
package me.Ravi.Lotr;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import org.bukkit.Location;
import me.Ravi.Lotr.LotrFaction.LotrSectEnum;
public class LotrSect implements Serializable
{
private static final long serialVersionUID = 1L;
LotrSectEnum sect;
Location Capital;
String CapitalName;
boolean isCapitalUnderAttack = false;
int reinforcementAmount = 0;
public List<War> wars = new ArrayList<War>();
public List<LotrFaction> factions = new ArrayList<LotrFaction>();
public List<LotrFPlayer> players = new ArrayList<LotrFPlayer>();
public LotrSect(Location Capital, LotrSectEnum sect)
{
this.sect = sect;
this.Capital = Capital;
}
public void setReinforcements(int amount)
{
if(isCapitalUnderAttack)
{
reinforcementAmount = amount;
}
}
public int getReinforcements()
{
return reinforcementAmount;
}
public LotrSectEnum getSect()
{
return sect;
}
public Location getCapital()
{
return Capital;
}
public void setXpBoost()
{
}
public void addFaction(LotrFaction faction)
{
factions.add(faction);
}
public void removeFaction(LotrFaction faction)
{
factions.remove(faction);
}
}
package me.Ravi.Lotr;
import java.io.Serializable;
import com.massivecraft.factions.FPlayer;
public class LotrFPlayer implements Serializable
{
private static final long serialVersionUID = 1L;
private FPlayer player;
public LotrFPlayer(FPlayer player)
{
this.player = player;
}
public FPlayer getFPlayer()
{
return player;
}
}
在这里我们可以看到,在服务器关闭时,它正在序列化我的所有数据。 序列化图片
但是当我随后启动我的服务器时,我 在启动时反序列化时得到了这个控制台图像。关于 如何完全加载我的 LotrSect 列表令人困惑。但是当我尝试加载 LotrFaction 和 LotrFPlayer 的列表时,它是空的。
解决方案
推荐阅读
- angular - 在 Angular 中,我是在子组件中使用父组件的方法还是使用服务?
- angular - 以角度显示循环
- db2 - SQL DB2:声明临时表添加列
- mysql - 唯一表约束
- python - 如何用 numpy 数组替换文件的一部分
- python - 在 YAML 中为嵌套键设置值
- r - 如何对矩阵或数据框中的值进行混洗,以使每个值在每行/列中仅出现一次?
- clean-architecture - 存储库如何依赖于用例清洁架构
- amazon-web-services - 在 cloudwatch 中使用单个指标创建指标数学警报
- string - 有没有更有效的方法来反转 SCALA 中的整数(正数和负数)?