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

标签 java serialization tree

我有另一个序列化问题,但这次是关于序列化为二进制时 Java 的 native 序列化导入。我必须序列化在另一个 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 在 java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1081) 在 java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:302) 在 BinaryS.main(BinaryS.java:24)

编辑:我知道它说的是 GeneralTree,但在类(class)开始时我把它放在了

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 文件,现在很容易解决!感谢您的帮助!

最佳答案

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

实际上,也可能是您存储在树中的对象不是可序列化的。集合只有在其中的所有元素都可序列化时才可序列化。

关于java - 实现树时使用 java.io.Serializable?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/364178/

相关文章:

java - 运行 junit 测试方法以与 JAX-RS 服务交互 - NoClassDefFoundError

java - 我怎样才能编码 "'“

java - 使用 while 循环时无法接受用户输入

c++ - 二维 vector 未正确保存和加载 boost::serialize 库

python - 如何在scrapy中使用项目字段对xml进行排序?

javascript - 从给定节点查找树中父节点的路径

java - 为什么在访问Child.name 时不执行Child 类的静态 block ?

c++ - 递归函数如何对二叉树进行运算?

list - 将节点列表转换为图形

serialization - Spark kryo 序列化寄存器 Datatype[]