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)問題は、最初にシリアル化したオブジェクトのタイプにキャストする必要があるときに、からの戻り値を文字列にキャストしていることだと思います(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」タグを Person クラスにマップすることを意味します。

逆シリアル化するには、次のことができます。

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

また、ストリームを2回閉じています。おそらくfinallyブロックでそれを行いたいでしょう:)

編集:上記のコメントを読んで...

タスクには次の 2 つの手順が含まれます。

  1. 逆シリアル化
  2. シリアル化

オブジェクトをシリアライズするには、まず入力ファイルからデシリアライズする必要があります。

オブジェクトを文字列として出力するには、次のようにします。

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