Модераторы: LSD, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не достаються из файла все объекты 
V
    Опции темы
can4ec
Дата 12.6.2007, 16:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



Здравствуйте. Моя проблема: Есть метод в который периодически приходят объекты и они сереализуються в один из двух моих файлов. Потом когда я хочу десериализовать объекты из файла первый объект считываеться нормально , а остальные не счит не считываются. Подскажите, лучше кодом .....)) заранее Спасибо.
PM MAIL   Вверх
chief39
Дата 12.6.2007, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


карманная тигра
***


Профиль
Группа: Участник Клуба
Сообщений: 1631
Регистрация: 20.5.2005
Где: Киев

Репутация: 15
Всего: 77



Гм. сначала расскажи как сериализуешь и пишешь в файл.
Все объекты сразу? Или открыл, записал, закрыл, опять открыл, ещё записал, закрыл?
Сдаётся мне, ты просто перезаписываешь 


--------------------
Люди - это свечи. Они либо горят, либо их - в жопу!(с)

PM MAIL   Вверх
can4ec
Дата 12.6.2007, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



Цитата(chief39 @ 12.6.2007,  17:07)
Гм. сначала расскажи как сериализуешь и пишешь в файл.
Все объекты сразу? Или открыл, записал, закрыл, опять открыл, ещё записал, закрыл?
Сдаётся мне, ты просто перезаписываешь

Второй твой вариан :открыл, записал, закрыл, опять открыл, ещё записал, закрыл

Код

Сериализую:
oos = new ObjectOutputStream(new FileOutputStream(nameFile, true));
oos.writeObject(object);
oos.flush();
oos.close();


Другой метод десериализую:

for (int n = 0; n < list.size(); n++)
 {
                        ois = new ObjectInputStream(new FileInputStream(nameFile));
                        Object object;
                        object =  ois.readObject();
                        listObject.add(object);
      }


PM MAIL   Вверх
Ulysses4j
Дата 12.6.2007, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 2
Всего: 10



can4ec, попробуй строки
Код
ois = new ObjectInputStream(new FileInputStream(nameFile));
Object object;

вынести из тела цикла  smile 

Это сообщение отредактировал(а) Ulysses4j - 12.6.2007, 17:28


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
can4ec
Дата 12.6.2007, 18:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



Цитата(Ulysses4j @ 12.6.2007,  17:27)
can4ec, попробуй строки
Код
ois = new ObjectInputStream(new FileInputStream(nameFile));
Object object;

вынести из тела цикла  smile

я там ошибся , вот два метода мои.
Код

  public void serializable(Object object)
    {
        ObjectOutputStream oos = null;
        try
        {
            i++;
            oos = new ObjectOutputStream(new FileOutputStream("info"));
            oos.writeInt(i);
            oos = new ObjectOutputStream(new FileOutputStream("futurama", true));
            oos.writeObject(object);
            oos.close();
        }
        catch (Exception e)
        {
        }
    }

    public ArrayList sSerializable()
    {
        ArrayList list = new ArrayList();
        ObjectInputStream ois = null;
        try
        {
            ois = new ObjectInputStream(new FileInputStream("info"));
            i = ois.readInt();
            ois = new ObjectInputStream(new FileInputStream("futurama"));
            
            for(int n=0; n<i; i++)
            {
                Object obj = ois.readObject();
                list.add(obj);
            }            
        }
        catch (Exception e)
        {
        }
        return list;
    }


PM MAIL   Вверх
Ulysses4j
Дата 12.6.2007, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 2
Всего: 10



Откуда взялось i в первом методе(где объявление и инициализация)?

Код
for(int n=0; n<i; i++)
 Это ерунда какая-то.

Пожалуйста, если несложно, исправьте орфографическую ошибку в названии темы - очень уж глаз мозолит. И используйте подсветку кода ([]-тэг с содержимым "code=java").

Добавлено @ 18:38
А что этот код вообще должен делать?

Это сообщение отредактировал(а) Ulysses4j - 12.6.2007, 19:07


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
can4ec
Дата 12.6.2007, 21:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



Цитата(Ulysses4j @ 12.6.2007,  18:32)
Откуда взялось i в первом методе(где объявление и инициализация)?

Код
for(int n=0; n<i; i++)
 Это ерунда какая-то.

Пожалуйста, если несложно, исправьте орфографическую ошибку в названии темы - очень уж глаз мозолит. И используйте подсветку кода ([]-тэг с содержимым "code=java").

Добавлено @ 18:38
А что этот код вообще должен делать?

Во-первых инициализации перемененной i  нет так как она объявлена в другом месте, не вижу смысла это показывать.
for(int n=0; n<i; n++) Во-вторых , да здесь я ошибся спс.
Не подскажите как можно исправить название не нешел.
И если вам трудно все таки прочесть самый первый пост еще раз выкладываю его вам "Здравствуйте. Моя проблема: Есть метод в который периодически приходят объекты и они сереализуються в файлов. Потом когда я хочу десериализовать объекты из файла первый объект считываеться нормально , а остальные не считываются. Подскажите, лучше кодом .....)) заранее Спасибо."
Может уже по теме кто-то поможет.
PM MAIL   Вверх
Ulysses4j
Дата 12.6.2007, 22:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 304
Регистрация: 6.6.2007
Где: Ростов-на-Дону

Репутация: 2
Всего: 10



Цитата(can4ec @  12.6.2007,  22:56 Найти цитируемый пост)
Во-первых инициализации перемененной i  нет так как она объявлена в другом месте, не вижу смысла это показывать.

Переменная i существенно влияет на ход десериализации, с которой вы испытываете проблемы. Пока не будет представлен весь ее жизненный цикл, сказать что-то определенное сложно. Более того, я подозреваю, что найти ошибку можно лишь видя порядок вызова методов serializable/sSerializable (очень неудачные имена, между прочим) - возможно, конечно, кто-то окажется более прозорливым чем я.

Цитата(can4ec @  12.6.2007,  22:56 Найти цитируемый пост)
И если вам трудно все таки прочесть самый первый пост

Нет, мне совершенно не трудно. Дело в том, что постановка вопроса в первом посте настолько обща, что посоветовать что-либо конкретное мне не представляется возможным, извините.

Цитата(can4ec @  12.6.2007,  22:56 Найти цитируемый пост)
Не подскажите как можно исправить название не нешел.

Цитата
не достаються из файла все объекты

Глаголы в третьем лице пишутся без "ь" после окончания.

Это сообщение отредактировал(а) Ulysses4j - 12.6.2007, 22:38


--------------------
Communication is critical to the job of a programmer.
C. Jazdzewski. Fatherly Advice To New Programmers
PM MAIL WWW   Вверх
can4ec
Дата 12.6.2007, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



Цитата(Ulysses4j @ 12.6.2007,  22:37)
Цитата(can4ec @  12.6.2007,  22:56 Найти цитируемый пост)
Во-первых инициализации перемененной i  нет так как она объявлена в другом месте, не вижу смысла это показывать.

Переменная i существенно влияет на ход десериализации, с которой вы испытываете проблемы. Пока не будет представлен весь ее жизненный цикл, сказать что-то определенное сложно. Более того, я подозреваю, что найти ошибку можно лишь видя порядок вызова методов serializable/sSerializable (очень неудачные имена, между прочим) - возможно, конечно, кто-то окажется более прозорливым чем я.

Цитата(can4ec @  12.6.2007,  22:56 Найти цитируемый пост)
И если вам трудно все таки прочесть самый первый пост

Нет, мне совершенно не трудно. Дело в том, что постановка вопроса в первом посте настолько обща, что посоветовать что-либо конкретное мне не представляется возможным, извините.

Цитата(can4ec @  12.6.2007,  22:56 Найти цитируемый пост)
Не подскажите как можно исправить название не нешел.

Цитата
не достаються из файла все объекты

Глаголы в третьем лице пишутся без "ь" после окончания.

Ошибку в названии я заметил, я спрашивал возможно ли ее исправить и если да то где. Вот что я не нашел. 
Я вопрос помоему простой. Эту переменную i можно вообще не использовать. Представьте что вы запустили программу создали объект и сериализовали его. Потом еще раз запустили программу создали еще объект и положили его в тот же файл. Потом начинаю десериализовать файл, первый объект считывается нормально, пытаюсь считать второй ошибка. 
PM MAIL   Вверх
LSD
Дата 13.6.2007, 08:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Десереализовывать объекты, надо точно так-же как и сериализовывать. Т.е. если ты записал объект и закрыл поток, потом дописал еще один и т.д. То десереализовывать надо так же: прочитал объект, закрыл поток, открыл новый поток с того самого места где остановился в прошлый раз.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
can4ec
Дата 13.6.2007, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



Цитата(LSD @ 13.6.2007,  08:41)
Десереализовывать объекты, надо точно так-же как и сериализовывать. Т.е. если ты записал объект и закрыл поток, потом дописал еще один и т.д. То десереализовывать надо так же: прочитал объект, закрыл поток, открыл новый поток с того самого места где остановился в прошлый раз.

Как открыть поток с того самого места где остановился?
PM MAIL   Вверх
can4ec
Дата 13.6.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



LSD:так открыть поток с того самого места?? не покажешь , а то уж очень надо. 
PM MAIL   Вверх
LSD
Дата 13.6.2007, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Тебе нужно написать класс обертку над стандартным потоком:
Код
public class MyInputStream extends InputStream
{
  private InputStream delegate;

  public MyInputStream(InputStream delegate)
  {
    this.delegate = delegate;
  }

  public int read() throws IOException
  {
    return delegate.read();
  }

  public int read(byte[] b) throws IOException
  {
    return delegate.read(b);
  }

  public int read(byte[] b, int off, int len) throws IOException
  {
    return delegate.read(b, off, len);
  }

  public long skip(long n) throws IOException
  {
    return delegate.skip(n);
  }

  public int available() throws IOException
  {
    return delegate.available();
  }

  public void close() throws IOException
  {
  }

  public void realyClose() throws IOException
  {
    delegate.close();
  }

  public void mark(int readlimit)
  {
    delegate.mark(readlimit);
  }

  public void reset() throws IOException
  {
    delegate.reset();
  }

  public boolean markSupported()
  {
    return delegate.markSupported();
  }
}

этот класс, не будет закрывать нижележащий поток по команде close(), и можно создать новый ObjectInputStream с этим же самым потоком.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
can4ec
Дата 13.6.2007, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



LSD: а как теперь это применить к моим методам?
Код

public void serializable(Object object)
    {
        ObjectOutputStream oos = null;
        try
        {
            i++;
            oos = new ObjectOutputStream(new FileOutputStream("info"));
            oos.writeInt(i);
            oos = new ObjectOutputStream(new FileOutputStream("futurama", true));
            oos.writeObject(object);
            oos.close();
        }
        catch (Exception e)
        {
        }
    }
    public ArrayList sSerializable()
    {
        ArrayList list = new ArrayList();
        ObjectInputStream ois = null;
        try
        {
            ois = new ObjectInputStream(new FileInputStream("info"));
            i = ois.readInt();
            ois = new ObjectInputStream(new FileInputStream("futurama"));
            
            for(int n=0; n<i; n++)
            {
                Object obj = ois.readObject();
                list.add(obj);
            }            
        }
        catch (Exception e)
        {
        }
        return list;
    }

не подскажешь , а то что-то не получаеться? заране спасибо за помщь и терпение ..)
Просто еще не понятно нужно ли писать свой ObjectInputStream ?


Это сообщение отредактировал(а) can4ec - 14.6.2007, 00:07
PM MAIL   Вверх
can4ec
Дата 14.6.2007, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 46
Регистрация: 25.4.2006

Репутация: 1
Всего: 1



LSD:  как применить к моим двум методам? smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.3072 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.