4

对于我的项目,我必须使用 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);
}

    
    

编辑: 我想通了;我不认为我必须将它打印为字符串,我只需要制作一个基准框架来计时它等等,但再次感谢!

4

2 回答 2

1

xstream.fromXML()方法将为您从输入流中读取。我认为问题在于您将返回值从xstream.fromXML(fin)String 转换为您最初序列化的对象类型(RandomTree我假设)。所以代码看起来像这样:

RandomTree tree = (RandomTree)xstream.fromXML(fin);

编辑:在注释中澄清之后,作者的目标是首先读入一个字符串,以便在反序列化之前打印 XML 内容。考虑到这个目标,我建议看看这个线程中提到的 IOUtils 库

于 2008-12-12T01:47:41.857 回答
1

根据我对http://x-stream.github.io/tutorial.html的了解(我以前从未使用过 XStream),您需要先定义您的类型。转换为 String 肯定是错误的,您可能需要自定义类型(取决于随机 XML 中的内容),然后您需要将 XML 标记映射到您的成员:

例如

xstream.alias("person", Person.class);
xstream.alias("phonenumber", PhoneNumber.class);

这意味着它将您的 XML 中的“人”标签映射到您的 Person 类。

要反序列化,您可以执行以下操作:

RandomTree myRandomTree = (RandomTree)xstream.fromXML( xml );

此外,您正在关闭您的流两次,您可能希望在 finally 块中执行此操作:)

编辑:阅读了您上面的评论...

您的任务涉及两个步骤:

  1. 反序列化
  2. 序列化

为了序列化你的对象,你必须首先从你的输入文件中反序列化它。

要将您的对象输出为字符串,只需执行

String xml = xstream.toXML( myRandomTree );
于 2008-12-12T02:12:54.350 回答