【问题标题】:Java hashset how to serialise multiple objectsJava hashset如何序列化多个对象
【发布时间】:2016-07-20 19:13:52
【问题描述】:

我问过一个关于如何将多个保存文件保存到 .ser 文件的问题,我被建议使用哈希集,因为它们是可序列化的。我尝试编写一段测试代码来序列化哈希集中的每条信息:

public class testHashSet {
    public static void main(String[] args) throws ClassNotFoundException {
        testClass new1 = new testClass("Hello", "male", true);
        testClass new2 = new testClass("Goodbye", "female", true);
        testClass new3 = new testClass("Something", "other", false);
        HashSet<testClass> hSet = new HashSet<testClass>();
        hSet.add(new1);
        hSet.add(new2);
        hSet.add(new3);
        System.out.println(hSet);
        for(int i = 0; i < hSet.size(); i++) {
            try {
                FileOutputStream fileOut = new FileOutputStream("/Users/Prodigy958/Desktop/Hack_exeSaves.ser");
                ObjectOutputStream out = new ObjectOutputStream(fileOut);
                out.writeObject(hSet(i));
                out.close();
                fileOut.close();
            } catch(IOException i) {
                i.printStackTrace();
            }
        }
    }
}

但是,我在获取使用 index(i) 编写对象的代码时遇到了麻烦,因为它表示该方法没有为类型 HashSet 定义。有没有办法遍历哈希集中的每一条信息,或者我应该一次序列化整个集合。另一个问题是,如果第一个答案是后者,我将如何将数据反序列化为单独的类?

【问题讨论】:

  • 您可以使用 for(testClass item : hSet) { ... } 遍历集合

标签: java serialization deserialization hashset


【解决方案1】:

解决方案:序列化哈希集本身。只要确保 testClass 实现 Serializable 并且它的所有字段都这样做。

当你想反序列化它并读取对象时,你将它转换为HashSet&lt;testClass&gt;,它会保持它在你序列化它之前的状态。

【讨论】:

  • 如果我序列化整个哈希集,当我反序列化它并尝试将每个“类对象”反序列化为一个单独的类时会发生什么
  • @Shaydoth 它将自动反序列化哈希集的所有元素。您可以想象,当您序列化一个对象时,它会递归地对其所有成员调用 serialize。它以相同的方式序列化。但是请确保您尝试序列化的实现 Serializable
  • 所以你建议当我反序列化它时,我应该将数据反序列化回一个hashset,然后再把hashset的每一块变成一个类对象?
  • 当你想反序列化它并读取对象时,你将它转换为 (HashSet) 并且它将保持它在你序列化它之前的状态。 @Shaydoth
  • @Shaydoth '将 HashSet 的每一部分变成一个类对象' 是没有意义的。这就是你反序列化它时的样子。
猜你喜欢
  • 2013-04-15
  • 2017-01-28
  • 2015-10-08
  • 2022-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-05
相关资源
最近更新 更多