我有另一个序列化问题,但这次是关于序列化为二进制时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文件,现在很容易解决!谢谢你的帮助!
答案 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。