Поскольку DirectedSparseGraph реализует сериализуемый ( javadoc ), почему я не могу создать граф, сериализовать его в файл, а затем десериализовать? InvalidClassException генерируется при вызове deserializer.readObject () с сообщением «нет допустимого конструктора».
Глядя на 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)