2013-06-01 4 views
2

Я хотел бы знать, почему моя программа читает только 1. элемент из написанных объектов. У меня есть 2 классов:Deserialization of ArrayList читает только один объект

public class Sheet implements Serializable{ 

int something1; 
String something2; 
} 

следующий:

public class Book implements Serializable{ 

ArrayList<Sheet> menu = new ArrayList<Sheet>(); 

public void newSheet(Sheet temp) 
{ menu.add(temp);} 

} 

Сохранение книги (в классе главной книги статична Книга Libro = новая книга();)

ObjectOutputStream out = new ObjectOutputStream(new FileOutputStream  ("libro.obiekt")); 
       out.writeObject(Libro); 
       out.close(); 

и чтение :

ObjectInputStream in = new ObjectInputStream(new FileInputStream("libro.obiekt")); 
     Libro = (Book) in.readObject(); 
     in.close(); 

Когда Я делаю это, имея, например, 5 объектов в ArrayList внутри Libro, я могу читать только первый, в то время как другие 4 будут NULL-объектами .... Любая идея, что я делаю неправильно?

+1

У вас, вероятно, есть 5 элементов в списке, но 4 последних являются пустым, когда сериализуют книгу. То есть ошибка имеет 99,9999% шанс оказаться в вашем коде. С кодом, который вы опубликовали, объяснить это невозможно. Создайте SSCCE, воспроизводя проблему, и опубликуйте этот SSCCE. –

+0

Ну, я могу дать вам полный код, но есть 5 элементов. Я работаю с ними, могу их распечатать, но когда я их сохраняю, а потом загружаю в свою программу, я вижу только первый из них, но другие - NULL. –

+0

Создайте самую маленькую полную программу, которую вы могли бы себе представить, и воспроизводите ее здесь. –

ответ

1

Вы можете прочитать только один объект из файла (сериализованный).

Причины:

  • Каждый раз, когда вы пишете объект в файл. вы перезаписываете его. поэтому вы получите только последний объект.
  • даже если вы установите Append к истинному

    FileOutputStream fout = new FileOutputStream(new File(file),true); 
        //setting the append to true 
    

десериализации заставит

java.io.StreamCorruptedException: invalid type code 

Чтобы преодолеть это:

1. Вы можете поместить все ваши объекты список и написать его в целом (ваш аррайалист). Сериализует список объектов в целом и десериализует его.

2. Вы можете написать каждый объект в другом файле и прочитать его.

+0

Это решает вашу проблему или это ваша проблема? – Dineshkumar

+0

Проблема в коде. Он уже сказал это в комментариях. У него проблема, это его код сериализации, это не ошибка Java API или anyhting. – davidbuzatto

+0

В конце концов я решил проблему - кажется, она работает. Но я удалил только «статический» из «static Book Libro = new Book();» Я полностью не знаю, в чем разница, но кажется, что это работает O_O –

Смежные вопросы