在实现树时使用java.io.Serializable?

时间:2008-12-12 21:19:47

标签: java serialization tree

我有另一个序列化问题,但这次是关于序列化为二进制时Java的本机序列化导入。我必须序列化在另一个java文件中生成的随机树。我知道序列化和反序列化是如何工作的,但是我在使用java.io.Serializable进行二进制序列化时所遵循的示例并不像我使用它时那样工作,比如一个简单的对象。这是我的代码段:

import java.io.*;
import java.io.FileInputStream;

public class BinaryS 
    {

    public static void main(String[] args) {
        Tree randomTree = RandomTreeBuilder.randomTree(10);

        FileOutputStream fOut=null;
        ObjectOutputStream oOut=null;

        try{
            fOut= new FileOutputStream("/Users/Pat/programs/binaryfile.txt");
            oOut = new ObjectOutputStream(fOut);
            oOut.writeObject(randomTree); //serializing randomTree
            System.out.println("An employee is serialized into /Users/Pat/binaryfile.txt");
        }catch(IOException e){
            e.printStackTrace();
        }finally{
            try {
                oOut.flush();
                oOut.close();
                fOut.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
});

我相信问题是当我使用writeObject(randomTree)时。当发生这种情况时,我得到一些终端例外......它们在下面:

java.io.NotSerializableException:GeneralTree     at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081)     at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302)     在BinaryS.main(BinaryS.java:24)

编辑:我知道它说的是GeneralTree,但是在课程开始的时候我就把它放在了

print("public class RandomTreeBuilder implements java.io.Serializable");

然后,在它下面找到了GeneralTree

print(" protected static Tree tree;
protected static ArrayList names;
//e6.1

/**
 *Builds a random tree.  The build method does the work.
 */
//b6.2
public static Tree randomTree(int n) {
    // Create a random binary tree with n external nodes
    tree = new GeneralTree();
    names = NameGenerator.getNames();
    build(tree.getRoot(), n);  // auxiliary recursive method
    return tree;

“);

更新:嘿伙计们,我想出了我自己的问题,原来我是一个白痴,并没有意识到我必须下载一个额外的.java文件,现在很容易解决!谢谢你的帮助!

2 个答案:

答案 0 :(得分:4)

据猜测,GeneralTree没有实现Serializable标记界面,如文档here所述。

实际上,它也可能是您在树中存储的对象不是可序列化的。如果Collection中的所有元素也是可序列化的,则Collection仅可序列化。

答案 1 :(得分:0)

  

编辑:我知道它说的是GeneralTree,但是   在课程开始时它就在我身上   放

print("public class RandomTreeBuilder implements java.io.Serializable");

这对你没有好处 - 你不是试图将 RandomTreeBuilder 类型的对象写入对象流;您尝试编写的类型是 GeneralTree ,该类必须实现 Serializable


仅供参考:如果您没有遇到过这篇文章,本文将介绍序列化的许多技巧和注意事项:Discover the secrets of the Java Serialization API