DirectedSparseGraphは直列化可能(javadoc)を実装しているので、グラフを作成せずにファイルにシリアル化してから逆シリアル化することはできますか? deserializer.readObject()が呼び出され、「有効なコンストラクターがありません」というメッセージとともに「InvalidClassException」がスローされます。JUNGのDirectedSparseGraphはシリアル化可能ですか?
javadocとソースファイルを見ると、引数なしのコンストラクタがあります。
これはライブラリのバグですか?または私は何かを逃している? Javaはどのタイプのコンストラクタを期待していますか?
DirectedSparseGraph graph = new DirectedSparseGraph();
FileOutputStream underlyingStream = new FileOutputStream("output/temp.jung");
ObjectOutputStream serializer = new ObjectOutputStream(underlyingStream);
serializer.writeObject(graph);
serializer.close();
underlyingStream.close();
FileInputStream underlyingStream2 = new FileInputStream("output/temp.jung");
ObjectInputStream deserializer = new ObjectInputStream(underlyingStream2);
DirectedSparseGraph loadedGraph = (DirectedSparseGraph) deserializer.readObject(); //EXCEPTION THROWN HERE
deserializer.close();
underlyingStream2.close();
例外:
Exception in thread "main" java.io.InvalidClassException: edu.uci.ics.jung.graph.DirectedSparseGraph; edu.uci.ics.jung.graph.DirectedSparseGraph; no valid constructor
at java.io.ObjectStreamClass.checkDeserialize(Unknown Source)
at java.io.ObjectInputStream.readOrdinaryObject(Unknown Source)
at java.io.ObjectInputStream.readObject0(Unknown Source)
at java.io.ObjectInputStream.readObject(Unknown Source)
at gui.GraphViewer.main(GraphViewer.java:39)
Caused by: java.io.InvalidClassException: edu.uci.ics.jung.graph.DirectedSparseGraph; no valid constructor
at java.io.ObjectStreamClass.<init>(Unknown Source)
at java.io.ObjectStreamClass.lookup(Unknown Source)
at java.io.ObjectOutputStream.writeObject0(Unknown Source)
at java.io.ObjectOutputStream.writeObject(Unknown Source)
at gui.GraphViewer.main(GraphViewer.java:33)
頂点を保存してファイルに保持し、後でそのファイルから最後の状態にロードしますか? 「jung-samples-2.0.1.jar」( 'jung-samples-2.0.1-sources.jar'を使用)の' PersistentLayoutDemo.java'を確認してください。 'PersistentLayoutImpl.persist()'メソッドは 'PersistentLayout.persist()'インタフェースメソッドを実装し、直列化された 'Point'クラスを使って頂点を保存します。 –