![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| light0ff |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.1.2006 Где: Латвия, Рига Репутация: нет Всего: нет |
Уменя есть формы. Необходимо сохранять (для последующего восстановления) положение, размеры и некоторые др. характеристики формы. Для этого я создал класс с несколькими необходимыми полями и имплементировал интерфейс java.io.Serializable.
Проблема заключается в следующем: Сохранил одну форму. Позже сохранил другую форму. Открыл первую форму, все успешно. Открываю вторую, а у меня вылетает исключение (java.io.StreamCorruptedException). Непонятно, в чем же проблема. Запись в файл:
Чтение из файла:
|
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 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. |
|||
|
||||
| light0ff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.1.2006 Где: Латвия, Рига Репутация: нет Всего: нет |
Да.
objectOutputStream.flush(); objectOutputStream.close(); |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Погоди, а почему ты дописываешь в файл?
Так конечно можно делать, но тогда при создании ObjectInputStream, FileInputStream должен быть позиционирован на то место где была произведена запись. Он пишет в начало потока некую сигнатуру и когда ее не находит ругается. -------------------- 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. |
|||
|
||||
| light0ff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.1.2006 Где: Латвия, Рига Репутация: нет Всего: нет |
Я, честно говоря, не очень понял.
Я каждый раз открываю файл на дозапись и пополняю записями. При чтении я иду по файлу в цикле, читаю записи. На второй итерации вылетает исключение. А как вообще можно позиционировать по файлу? А то мне также надо будет некоторые объекты заменять. |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не очень хороший метод, я бы даже добавил это плохой метод. Проблема в том, что FileOutputStream в начало потока пишет некую последовательносять байт, обозначающую начало потока. После того как ты записал объект 1, он записал эту сигнатуру и данные объекта. Затем ты закрыл поток, и писал новым потоком, который снова записал эту последовательность. Поэтому когда, ты читаешь первый объект все ОК, т.к. и сигнатура на месте и данные объекта. А когда читаешь второй, то ему попадается сигнатура, хотя он ее уже не ожидает, а ожидает данные объекта. Тебе нужно закрыть 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. |
|||
|
||||
| light0ff |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 29.1.2006 Где: Латвия, Рига Репутация: нет Всего: нет |
Очередной раз большое спасибо;)
Я решил при записи считавать из файла все уже существующие объекты, добавлять в в колекцию новый объект или редактировать старый объект, записывать все объекты из коллекции в файл. Проблема решена. |
|||
|
||||
| Jiona |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 14 Регистрация: 5.3.2006 Репутация: нет Всего: нет |
Хм... а как читать из файла объекты? У меня есть файл .dat с несколькими объектами одного класса и мне надо реализовать цикл для чтения объектов в коллекцию... как этот цикл будет выглядеть?
|
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Собственно, так же, как цикл записи их туда А разве нельзя просто сериализовать объект коллекции целиком? -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| SnowDevil |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 1 Регистрация: 24.5.2006 Репутация: нет Всего: нет |
Этим методом я записываю объект в файл:
А как мне считать потом из файла все объекты? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 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. |
|||
|
||||
| invis87 |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 1.11.2007 Где: город Королёв Репутация: нет Всего: нет |
А возможно ли делать так:
Затем я удаляю объявление массива и ArrayList'a (идея в том что инициализация должна быть с файла) и делаю так:
После этого arrlist такой же какой и должен быть и готов к использованию, а вот простой массив остаётся null :( Не понимаю почему. И вообще можно ли так делать ? Не коряво ли ? А делать второй файл ради одного массива не хочется, да и разобраться надо. Заранее спасибо ! |
||||
|
|||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 24 Всего: 151 |
Эксепшнов-то нет?
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Массивы нормально сериализуются, если у тебя массив возвращается как null, значит у тебя сама ссылка на массив была null.
-------------------- 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. |
|||
|
||||
| nc30 |
|
|||
|
Интересующийся :) ![]() Профиль Группа: Участник Сообщений: 140 Регистрация: 24.6.2010 Где: Санкт-Петербург Репутация: 5 Всего: 8 |
LSD, расскажите, если не сложно, про реализацию нескольких сессий записи/чтения для одного файла. Я начал изучать Java и столкнулся с точно такой же проблемой. БД еще не проходили, только вот до потоков ввода/вывода добрались. |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |