Как сериализовать / десериализовать два разных типа списка в один последовательный файл - PullRequest
0 голосов
/ 30 апреля 2019

У меня есть три разных списка разных типов контактов, которые мне нужно сериализовать в один файл, а затем извлекать эти списки при необходимости (десериализация).Я думал об использовании хэш-карты, но я не знаком с, и я уверен, как я получу списки без изменений.Любые идеи приветствуются.

Я не уверен, смогу ли я просто использовать тип объекта в хэш-карте.Это единственный способ добавить все три списка в хэш-карту.Также мне нужно знать правильный способ получения этих списков из хэш-карты, если это лучший подход.

public class Controller()
{
    // the list objects I need to serialize
    List<FamilyContact> friendContacts = new ArrayList<FamilyContact>();
    List<Contact> fdContacts = new ArrayList<>(friendContacts);

    List<FamilyContact> familyContacts = new ArrayList<FamilyContact>();
    List<Contact> fContacts = new ArrayList<>(familyContacts);

    // methods to retrieve the lists and list items
}


//Serialization code
public class Serialization
{


    public void serialize(HashMap<String, Object> lists, String fileName)
    {

        // serializes the hashmap passed from calling method
        try (ObjectOutputStream output = 
                new ObjectOutputStream(new FileOutputStream(fileName)))
        {
            output.writeObject(lists);
            output.close();
        }
        catch(IOException ex)
        {
            System.out.println(ex.getMessage());
            ex.printStackTrace();
        }
    }

    @SuppressWarnings("unchecked")
    public HashMap<String, Object> deserialize(String fileName)
    {
        try (ObjectInputStream input = 
                new ObjectInputStream(new FileInputStream(fileName)))
        {
            HashMap<String, Object> lists = (HashMap)input.readObject();
            System.out.println(lists.size());
            input.close();
            return lists;
        }
        catch (IOException | ClassNotFoundException ex)
        {
            if(ex.getClass().getName() == "java.io.FileNotFoundException")
            {
                showErrorDialog("File Not Found", "Contacts.ser not found");
            }
            else
            {
                System.out.println(ex.getClass().getName());
                System.out.println(ex.getMessage());
            }
        }
        return null;
    }

1 Ответ

0 голосов
/ 30 апреля 2019

Когда вы десериализуете объект, он [обычно] получается того же типа, что и вы его сериализовали. Так что сериализация это красная сельдь.

Использование Map в таких ситуациях обычно является ненужной вещью. Тем более что у вас есть разные типы, которые приведут к кастингу.

Таким образом, вы, вероятно, захотите [неизменный] тип значения, написанный обычным [слишком многословным] способом.

...