Как десериализовать ArrayList данных из двоичного файла в Java? - PullRequest
0 голосов
/ 30 октября 2011

Я сохранил arrayList в двоичный файл с помощью serialastion. Как мне теперь получить эти данные из двоичного файла?

Это код, который я использовал для сериализации

public void createSerialisable() throws IOException
{
    FileOutputStream fileOut =  new FileOutputStream("theBkup.ser");
    ObjectOutputStream out =  new ObjectOutputStream(fileOut);
    out.writeObject(allDeps);
    options();
}

и этот код я пытаюсь использовать для десериализации arrayList:

public void readInSerialisable() throws IOException
{
    FileInputStream fileIn = new FileInputStream("theBKup.ser");

    ObjectInputStream in = new ObjectInputStream(fileIn);

    try
    {
     ArrayList readob  = (ArrayList)oi.readObject();  
               allDeps = (ArrayList) in.readObject();
    }
    catch (IOException exc)
    {
        System.out.println("didnt work");
    }
}

allDeps - объявленный список массивов в конструкторе классов. Я пытаюсь сохранить arrayList из файла в arrayList, объявленный в этом классе.

1 Ответ

1 голос
/ 30 октября 2011

Ваш код в основном правильный, но есть одна ошибка и пара вещей, которые могут заставить его работать лучше.Я выделил их звездочками (поскольку, по-видимому, я не могу выделить их жирным шрифтом в режиме «кода»).

public void createSerialisable() throws IOException
{
    FileOutputStream fileOut =  new FileOutputStream("theBkup.ser");
    ObjectOutputStream out =  new ObjectOutputStream(fileOut);
    out.writeObject(allDeps);
    **out.flush();** // Probably not strictly necessary, but a good idea nonetheless
    **out.close();** // Probably not strictly necessary, but a good idea nonetheless
    options();
}

public void readInSerialisable() throws IOException
{
    FileInputStream fileIn = new FileInputStream("theBKup.ser");

    ObjectInputStream in = new ObjectInputStream(fileIn);

    try
    { 
        **// You only wrote one object, so only try to read one object back.**
        allDeps = (ArrayList) in.readObject();
    }
    catch (IOException exc)
    {
        System.out.println("didnt work");
        **exc.printStackTrace();** // Very useful for findout out exactly what went wrong.
    }
}

Надеюсь, это поможет.Если проблема все еще возникает, убедитесь, что вы опубликовали трассировку стека и полный, автономный, компилируемый пример, демонстрирующий проблему.

Обратите внимание, что я предположил, что allDeps содержит объекты, которые на самом делеSerializable и ваша проблема в readInSerialisable, а не в createSerialisable.Опять же, трассировка стека была бы чрезвычайно полезна.

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