|
Java форум JavaTalks форум программистов
|
|
|
|
| Предыдущая тема :: Следующая тема |
| Автор |
Сообщение |
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;
}
|
Теперь можем читать произвольное число объектов, и возвращать число прочитанных |
|
|
|
 |
Even : 15 Новичок
|
Янв 07, 2009 22:06 |
|
|
А у меня такая же проблемма. Тока проблемма в том, что мой in.available() всегда равен 0. Что ту может быть?
Если пустить цикл без проверки, то он читает объекты как надо(в Debug'е проверял). Но возвращает мой ObjectInputStream in = new ObjectInputStream(new FileInputStream(f)) в методе in.available() всегда 0 . |
|
|
|
 |
Vlad : 1670 JavaTalks Team Member Откуда: ODS-KRK-LON-HFE
|
Янв 11, 2009 22:29 |
|
|
| Можно первым объектом записать в файл количество объектов (число). |
|
|
|
 |
Even : 15 Новичок
|
Янв 12, 2009 23:29 |
|
|
Можно... можно ещё использовать исключение "конец файла" для адекватного выхода(так и делаю)
так, что ли, так и должно быть?  |
|
|
|
 |
Vermut : 1062 Завсегдатай Откуда: Ростов-на-Дону
|
Янв 13, 2009 14:20 |
|
|
| Even писал(а): |
А у меня такая же проблемма. Тока проблемма в том, что мой in.available() всегда равен 0. Что ту может быть?
Если пустить цикл без проверки, то он читает объекты как надо(в Debug'е проверял). Но возвращает мой ObjectInputStream in = new ObjectInputStream(new FileInputStream(f)) в методе in.available() всегда 0 . |
ObjectInputStream.available() всегда возвращает ноль. Проверяете через FileInputStream _________________ Познакомлюсь с привлекательной Ростовчанкой для совместного изучения Java |
|
|
|
 |
Even : 15 Новичок
|
Янв 14, 2009 0:12 |
|
|
|
|
|
|
 |
|
|
Страница 1 из 1
|
Список форумов
-> Сериализация (Serialization API) |
|
Вы не можете начинать темы Вы не можете отвечать на сообщения Вы не можете редактировать свои сообщения Вы не можете удалять свои сообщения Вы не можете голосовать в опросах
|
|