2014-01-17 3 views
0
public void writeObject(String outFile) { 
    try { 
     FileOutputStream fos = new FileOutputStream(outFile); 
     ObjectOutputStream oos = new ObjectOutputStream(fos); 
     Student[] copy = this.getStudents(); 
     for (Student st : copy){  
      oos.writeObject(st);} 
     oos.close(); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 

} 

Код, указанный выше, является функцией, которую я использую для сериализации содержимого моего репозитория, getStudens() возвращает массив моих данных.Проблемы с сериализацией

public void readSerialized(String fileName) throws Exception { 
    FileInputStream fis = new FileInputStream(fileName); 
    ObjectInputStream ois = new ObjectInputStream(fis); 
    while(fis.available()>0){ 
    ctrl.addC((Student) ois.readObject());} 
    ois.close(); 
    } 

Это моя функция десериализации, которая должна восстановить свои данные и добавить его снова в моей проблеме repository.The в том, что он не воссоздает данные, которые я имел в моем хранилище, когда я сериализовать его первым. Что я имел в хранилище до десериализации:

1 a 4.0 6.0 
2 b 10.0 10.0 
3 c 2.0 2.0 
4 d 8.0 2.0 
5 e 6.0 2.0 

То, что десериализации возвращается:

0 3.0 
0 5.0 

ли это означает, что моя функция сериализации не правильно или что-то пойдет не так, когда я десериализации?

ответ

0

Ваш код излишне усложняется и использование доступных() всегда довольно запутанно. Это означает, что вы можете читать без системного вызова это не значит, что ничего не осталось.

Я предлагаю просто сериализовать массив.

FileOutputStream fos = new FileOutputStream(outFile); 
ObjectOutputStream oos = new ObjectOutputStream(fos); 
oos.writeObject(this.getStudents()); 
oos.close(); 

FileInputStream fis = new FileInputStream(fileName); 
ObjectInputStream ois = new ObjectInputStream(fis); 
Student[] copy = (Student[]) ois.readObject(); 
ois.close(); 

В Java массивы также являются объектами.

+0

Пробовал это, но когда я печатаю на экране снова, он не показывает мне строки 'a',' b' и т. Д., Только числа – Matt

+0

. Думаю, вы пытаетесь напечатать 'String [ ] ', который должен выглядеть примерно так:' [String @ 7ef27456' Это не связано с сериализацией, но факт, что array.toString() довольно бесполезен. Я предлагаю напечатать 'Arrays.toString (копировать)' –

+1

Это означает, что вы можете читать без блокировки. Это может означать два системных вызова вместо одного. – EJP

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