Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Десериализация
Список форумов
 ->  Сериализация (Serialization API)


 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
can4ec : 24
Новичок

СообщениеМай 20, 2007 19:03 
Ответить с цитатой
Здравствуйте!!! У меня такой вопро. В одном файле (после сериализации) лежат как пример 4 объекта. В другом методе я произвожу десериализацию и хочу вынуть из этого файл все 4 свои объекта и записать их в Лист. Как мне это сделать?
Просто когда я десериализирую вот так:
FileInputStream fis = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fis);
memoryDao = (Dao) ois.readObject();
мне вынимается токо один объект , а как остальные вынуть и записать в тот же Лист.
P.S. Другие варианты сериализации не предлагать , у меня задание просто вытащить не один объект из файла.
К началу Посмотреть профиль Отправить личное сообщение
Vlad : 1670
JavaTalks Team Member
Откуда: ODS-KRK-LON-HFE

СообщениеМай 21, 2007 1:14 
Ответить с цитатой
А несколько раз выполнить вызов ois.readObject(); не пробовал (один вызов на каждый объект, сохраненный в файле)?
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
can4ec : 24
Новичок

СообщениеМай 21, 2007 1:58 
Ответить с цитатой
Vlad писал(а):
А несколько раз выполнить вызов ois.readObject(); не пробовал (один вызов на каждый объект, сохраненный в файле)?

Мне кажеться получиться не удобно если там будет 200 объектов.
К началу Посмотреть профиль Отправить личное сообщение
Jean : 1992
JavaTalks Team Member
Откуда: Санкт-Петербург

СообщениеМай 21, 2007 8:33 
Ответить с цитатой
А как Вы их туда записываете? Последовательно выводите в один файл четыре объекта? Если так, то и восстанавливать нужно также - последовательно все четыре объекта.
Для упрощения процедуры можно переопределить методы сериализации и выполнить там нужные Вам действия.
К началу Посмотреть профиль Отправить личное сообщение
Vlad : 1670
JavaTalks Team Member
Откуда: ODS-KRK-LON-HFE

СообщениеМай 24, 2007 20:01 
Ответить с цитатой
Рабочий пример:
Код:
import java.io.FileInputStream;
import java.io.*;

public class ObjectSerializer implements Serializable {

   private int ival;

   private String sval;

   public ObjectSerializer(int i, String s) {
      ival = i;
      sval = s;
   }
   
   public String toString() {
      return "int=" + ival + ", string=" + sval;
   }
   
   public static void testWrite() throws IOException {
      FileOutputStream fos = new FileOutputStream("c:/temp/ObjectSerializer.ser");
      ObjectOutputStream oos = new ObjectOutputStream(fos);
      for (int i = 0; i < 3; i++) {
         ObjectSerializer obj = new ObjectSerializer(i, "String of " + i);
         System.out.println("Writing " + obj);
         oos.writeObject(obj);
      }
      oos.close();
   }

   public static void testRead() throws IOException, ClassNotFoundException {
      FileInputStream fis = new FileInputStream("c:/temp/ObjectSerializer.ser");
      ObjectInputStream ois = new ObjectInputStream(fis);
      for (int i = 0; i < 3; i++) {
         ObjectSerializer obj = (ObjectSerializer) ois.readObject();
         System.out.println(obj + " is read");
      }
      ois.close();
   }

   public static void main(String[] args) throws IOException, ClassNotFoundException {
      testWrite();
      testRead();
   }
}
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Vermut : 1062
Завсегдатай
Откуда: Ростов-на-Дону

СообщениеНоя 19, 2008 11:20 
Ответить с цитатой
Цитата:
мне вынимается токо один объект , а как остальные вынуть и записать в тот же Лист.
P.S. Другие варианты сериализации не предлагать , у меня задание просто вытащить не один объект из файла.

Немного плагиата от Vlad
Код:

public static void testRead() throws IOException, ClassNotFoundException {
      FileInputStream fis = new FileInputStream("c:/temp/ObjectSerializer.ser");
      ObjectInputStream ois = new ObjectInputStream(fis);
      for (int i = 0; i < 3; i++) {
         ObjectSerializer obj = (ObjectSerializer) ois.readObject();
         System.out.println(obj + " is read");
      }
      ois.close();
   }

Переделываем в:
Код:

public static int testRead() throws IOException, ClassNotFoundException {
      FileInputStream fis = new FileInputStream("c:/temp/ObjectSerializer.ser");
      ObjectInputStream ois = new ObjectInputStream(fis);
       int count=0;
       while(fis.available()>0)
       {count++;
         ObjectSerializer obj = (ObjectSerializer) ois.readObject();
         System.out.println(obj +" № "+ count +" is read");
       }
      ois.close();
    return count; 
 }

Теперь можем читать произвольное число объектов, и возвращать число прочитанных
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
Even : 15
Новичок

СообщениеЯнв 07, 2009 22:06 
Ответить с цитатой
А у меня такая же проблемма. Тока проблемма в том, что мой in.available() всегда равен 0. Что ту может быть?
Если пустить цикл без проверки, то он читает объекты как надо(в Debug'е проверял). Но возвращает мой ObjectInputStream in = new ObjectInputStream(new FileInputStream(f)) в методе in.available() всегда 0 Sad .
К началу Посмотреть профиль Отправить личное сообщение
Vlad : 1670
JavaTalks Team Member
Откуда: ODS-KRK-LON-HFE

СообщениеЯнв 11, 2009 22:29 
Ответить с цитатой
Можно первым объектом записать в файл количество объектов (число).
К началу Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Even : 15
Новичок

СообщениеЯнв 12, 2009 23:29 
Ответить с цитатой
Можно... можно ещё использовать исключение "конец файла" для адекватного выхода(так и делаю)
так, что ли, так и должно быть? Sad
К началу Посмотреть профиль Отправить личное сообщение
Vermut : 1062
Завсегдатай
Откуда: Ростов-на-Дону

СообщениеЯнв 13, 2009 14:20 
Ответить с цитатой
Even писал(а):
А у меня такая же проблемма. Тока проблемма в том, что мой in.available() всегда равен 0. Что ту может быть?
Если пустить цикл без проверки, то он читает объекты как надо(в Debug'е проверял). Но возвращает мой ObjectInputStream in = new ObjectInputStream(new FileInputStream(f)) в методе in.available() всегда 0 Sad .

ObjectInputStream.available() всегда возвращает ноль. Проверяете через FileInputStream
_________________
Познакомлюсь с привлекательной Ростовчанкой для совместного изучения Java
К началу Посмотреть профиль Отправить личное сообщение Отправить e-mail
Even : 15
Новичок

СообщениеЯнв 14, 2009 0:12 
Ответить с цитатой
Ясно. Спасиба
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 1
Список форумов
 -> Сериализация (Serialization API)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru