2015-04-02 28 views
0

我有一个有很多信息的类Bucket,其中我只想将(可串行化的)两个字段存储到一个文件中。因此,我做了Bucket扩展ChatData它只保留这两个字段,因为我认为当上传时,我可能会丢失无用的信息,然后将bucket对象存储为chatdata对象。向父类丢失信息 - 存储对象的一部分

但是,上传到超类不会使对象失去其子类信息。我怎样才能做到这一点?

public class ChatData implements Serializable { 
    private int f1 = 1; 
    private int f2 = 2; 
} 

public class Bucket extends ChatData implements Serializable { 
    private int f3 = 3; 
    private int f4 = 4; // useless data when it comes to storing 
    private int f5 = 5; 
    public void store(ObjectOutputStream oos) { 
     oos.writeObject((ChatData) this); // does also store f3, f4, f5, 
     // ... but I don't whant these! 
     // also, unnecessary cast, does not do anything 
    } 

    public static void main(String[] args) { 
     Bucket b = new Bucket(); 
     b.store(new ObjectOutputStream(new FileOutputStream("C:/output.dat")); 
    } 
} 

(未经测试的代码,只为可视化)

我怎么能写我Bucket对象作为ChatData对象到我的硬盘驱动器?如果不是,只有部分存储对象的首选方法是什么?

我能想到一个简单的解决方案,比如创建一个全新的对象,但我宁愿理解什么是最好的方法。

回答

1

如果你不想序列化一个类的成员。只需将其标记为transient即可。

在你的特殊情况下,你不需要经历创建超类的麻烦。做到这一点,而不是:

public class Bucket implements Serializable { 
    transient private int f3 = 3; 
    transient private int f4 = 4; // useless data when it comes to storing 
    transient private int f5 = 5; 
    private int f1 = 1; 
    private int f2 = 2; 

    //leave the remaining code in this class as it is 
} 
+0

这在某种程度上也几乎没有任何节省硬盘空间可言,虽然一半的数据应该是失踪......不知道为什么..但它的工作原理无论如何,感谢 – Blauhirn 2015-04-02 19:11:50

+0

不要忘记如果你觉得它对你有帮助 – CKing 2015-04-03 07:17:56