我已就这个问题做过一些研究,但是我自己找不到任何解决方案。
问题是这样的: 我有三个不同类型的独立Set对象。
示例:
private static Set<Vessel> vessels = new HashSet<Vessel>();
private static Set<Seperator> vessels1 = new HashSet<Seperator>();
private static Set<Pipe> vessels2 = new HashSet<Pipe>();
Vessel,Seperator和Pipe实现 Serializable 界面。
简化示例:
public class Vessel implements Serializable{
private static final long serialVersionUID = 1L;
int id;
public Vessel(int id){
this.id = id;
}
}
public class Seperator implements Serializable{
private static final long serialVersionUID = 1L;
int id;
public Seperator(int id){
this.id = id;
}
}
public class Pipe implements Serializable{
private static final long serialVersionUID = 1L;
int id;
public Pipe(int id){
this.id = id;
}
}
我知道如何将这些集序列化为单独的文件。但是,我很难找到一种方法将所有三个独立集序列化为单个文件,这最终是我查询的目标。
理想情况下,我正在寻找一个关于如何将具有不同类型的多个集合序列化和反序列化为单个文件的示例。
答案 0 :(得分:1)
@Vasu建议的方法应该适合你。但是,当您只想反序列化一个集合时,这将带来反序列化完整链表(集合)的额外成本。因此,在DB等持久性存储中,您的问题的完整解决方案是可能的,但不能在文件系统上。我正在粘贴相关主题的previos SO帖子的以下评论。
为什么不能包含多个附加的ObjectOutputStreams的文件 由一个ObjectInputStream反序列化?
使用序列化的默认实现,必须有一个 ObjectOutputStream构造与之间的一对一映射 ObjectInputStream构造。 ObjectOutputStream构造函数写入 流标头和ObjectInputStream读取此流标头。一个 解决方法是继承ObjectOutputStream并重写 writeStreamHeader()。重写的writeStreamHeader()应该调用 超级writeStreamHeader方法,如果它是第一次写入 文件,它应该调用ObjectOutputStream.reset()如果它是追加 到文件中预先存在的ObjectOutputStream。
答案 1 :(得分:0)
如果将单个Set对象放入文件中,则需要在从文件中读取它们时记住该顺序。所以最好将这3组放入一个类中并编写该类以避免该问题。像
class SetValues implements Serializable {
private static Set<Vessel> vessels = new HashSet<Vessel>();
private static Set<Seperator> vessels = new HashSet<Seperator>();
private static Set<Pipe> vessels = new HashSet<Pipe>();
//getters and setters
}
答案 2 :(得分:0)
定义LinkedList并使用add添加对象。 LinkedList实现Serializable,因此您可以将其写入文件。只需确保以相同的顺序添加和回读您的集。
=Month(C2)