这是交易。
对于我的项目,我必须使用Java和XStream对随机树进行序列化和反序列化。我的老师制作了Tree / RandomTree算法,所以我不必担心。我不知道该怎么做是这样的:我使用FileInputStream来读/写我序列化和反序列化的xml文件,但是当我反序列化时,我不知道用于读取文件的方法。在我读完文件之后,我应该能够从XML转换它,然后将其作为字符串打印出来。这是我到目前为止所拥有的。 (我正确导入了所有内容,只是没有将其添加到我的代码段)。
FileInputStream fin;
try
{
// Open an input stream
fin = new FileInputStream ("/Users/Pat/programs/randomtree.xml");
//I don't know what to put below this, to read FileInpuStream object fin
String dexml = (String)xstream.fromXML(fin);
System.out.println(dexml);
// Close our input stream
fin.close();
System.out.println(dexml);
// Close our input stream
fin.close();
}
// Catches any error conditions
catch (IOException e)
{
System.err.println ("Unable to read from file");
System.exit(-1);
}
编辑:嘿伙计们,感谢您的帮助,我想出来了;我不认为我必须将其打印为字符串,我只需要制作一个基准测试框架来计时等等,但再次感谢!
答案 0 :(得分:1)
xstream.fromXML()
方法将为您输入输入流。我认为问题是你将xstream.fromXML(fin)
的返回值转换为一个字符串,它应该被转换为你最初序列化的对象类型(我假设RandomTree
)。所以代码看起来像这样:
RandomTree tree = (RandomTree)xstream.fromXML(fin);
编辑:在评论中澄清之后,作者的目标是首先读入一个字符串,以便在反序列化之前打印XML内容。考虑到这一目标,我建议您查看this thread 中提到的IOUtils库
答案 1 :(得分:1)
根据我对http://x-stream.github.io/tutorial.html的理解(我之前从未使用过XStream),您需要先定义类型。转换为String绝对是错误的,你可能想要一个自定义类型(取决于随机XML中的内容),然后你需要将XML标签映射到你的成员:
e.g。
xstream.alias("person", Person.class);
xstream.alias("phonenumber", PhoneNumber.class);
意味着它将XML中的“person”标记映射到Person类。
要进行去科学化,你可以这样做:
RandomTree myRandomTree = (RandomTree)xstream.fromXML( xml );
此外,您关闭了两次流,并且您可能希望在finally块中执行此操作:)
编辑:阅读上面的评论......
您的任务涉及两个步骤:
为了序列化您的对象,您必须首先从输入文件中反序列化它。
要将对象输出为String,只需执行
String xml = xstream.toXML( myRandomTree );