Сериализация Java с помощью LinkedList - PullRequest
0 голосов
/ 15 ноября 2018

Я должен сделать связанный список Сериализуемым.Я понимаю основы и сделал это успешно, но это бросило меня в тупик.

Список состоит из узлов, а класс получен из интерфейса.«Данные» для каждого узла остаются неопределенными, то есть в них может содержаться любой тип данных или объект.В приведенном ниже фрагменте тип «М».Как мне указать, какой тип данных может быть в нем, чтобы сделать его Serializable?

В настоящее время я тестирую его с сохранением Strings и Doubles, но скоро буду использовать объект make с пользовательским классом.Я могу подтвердить, что список создан правильно.

Класс LinkedList:

public class LinkedMovieList<M extends Comparable<M>>
implements GVLinkedList<M>, Serializable {

private class Node {
    public M data;
    public Node next;

    Node(M element) {
        data = element;
        next = null;
    }

}

Node head, tail;

Метод сериализации:

private GVLinkedList<Double> allVar, empty;
    allVar = new DoublyLinkedMovieList<>();
    empty = new DoubleLinkedMovieList<>();
    private Double[] doubleList = {1.2, 2.2, 3.2, 4.2, 5.2, 6.2, 7.2, 8.2, 9.2};
    for (Double v : doubleList){
        allVar.insertLast(v);
    }

    File linkedFile = new File("LinkedMovieList.dat");

    try{
        FileOutputStream fileOut = new FileOutputStream(linkedFile);
        ObjectOutputStream objectOut = new ObjectOutputStream(fileOut);
        objectOut.writeObject(allVar);  //NotSerializableException thrown

        objectOut.close();

        FileInputStream fileIn = new FileInputStream(linkedFile);
        ObjectInputStream objectIn = new ObjectInputStream(fileIn);

        empty = (GVLinkedList<Double>) objectIn.readObject();
        objectIn.close();
    }
    catch (FileNotFoundException e){
        e.printStackTrace();
    }
    catch (IOException e){
        e.printStackTrace();
    }
    catch (ClassNotFoundException e){
        e.printStackTrace();
    }

Любая помощь будет принята с благодарностью!Я чувствую, что это нечто простое, что я должен знать ... Stack Trace:

java.io.NotSerializableException: edu.gvsu.cs163.LinkedMovieList$Node
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1184)
at java.io.ObjectOutputStream.defaultWriteFields(ObjectOutputStream.java:1548)
at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1509)
at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1432)
at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1178)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:348)
at edu.gvsu.cs163.Test.LinkedListTestDouble.isSerializable(LinkedListTestDouble.java:321)

1 Ответ

0 голосов
/ 15 ноября 2018

Реализация интерфейса Serializable на Node класс

public class LinkedMovieList<M extends Comparable<M>>
implements GVLinkedList<M>, Serializable {

private class Node implements Serializable {
public M data;
public Node next;

Node(M element) {
    data = element;
    next = null;
}

}

Node head, tail;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...