2008-12-12 41 views
1

我还有一个问题,系列化,但这次串行二进制时,它是关于Java的本机序列导入。我必须序列化在另一个java文件中生成的随机树。我知道序列化和反序列化是如何工作的,但是当我使用java.io.Serializable使用二进制序列化时,我遵循的例子并不像我使用它时那样工作,比如说一个简单的对象。这里是我的代码段:实现树时使用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,但在类是在我开始把

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文件,一个简单的修复吧!谢谢你的帮助!

回答

4

根据猜测,GeneralTree不实施Serializable标记接口,如文档here所述。

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

0

编辑:我知道这说GeneralTree,但 在类是在一开始我 把

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

这对你没有好 - 你是不是要写一个对象类型RandomTreeBuilder到对象流;你试图写类型是GeneralTree,它是类必须实现Serializable接口


FYI:如果你有没有碰到过它来了,本文涵盖了许多序列化的技巧和需要注意的地方:Discover the secrets of the Java Serialization API