![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Есть несколько объектов класса News (дата, заголовок, тело), как можно сохранить, а потом извлечь их из файла
|
|||
|
||||
powerOn |
|
||||||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 47 Всего: 159 |
Я например поступаю след. образом:
Есть у меня класс-сущность, которая содержит только информационные поля. На каждое поле добавляю setter и getter метод. А сам класс реализует интерфейс Serializable, который не содержит никаких методов.
Сохраняю объект в файл.
Читаю объект из файла:
Сериализация, одно слово! ![]() |
||||||
|
|||||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
JavaBeans можно сериализовывать в XML, пример есть в FAQ.
-------------------- 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. |
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Ок, спасибо, буду пробовать
Кстати по поводу сериализации в XML, мне кажется это будет медленней чем просто записывать в файл |
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
В продолжении темы хорошая статейка про сохраниние объектов http://www.javable.com/javaworld/07_00/01/
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Неплохая статья, но оценка времени уж слишком поверхностна. На сложных объектах, с большим количеством полей, разница будет еще больше.
Но вообще они правы, самый быстрый способ, это самому реализовать метод сохранения. Причем не обязательно, использовать ObjectOutputStream и Externalizable, можно написать свои интерфейсы. -------------------- 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. |
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Так, чтобы один объект в файл записиать, а потом его считать проблем теперь нет. Теперь вопрос как записать и считать несколько объектов, хотя бы одного типа. С записью я вроде разобрался, а вот насчет того как считывать пока не понятно.
|
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
Пока получилось следующее:
Создаю массив объектов и записываю его в файл, а затем считываю. А хотелось бы: Дозаписывать объекты в уже существующий файл с объектами того же типа |
|||
|
||||
Аленка |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 16.6.2006 Репутация: нет Всего: нет |
А в чем проблема? Методы writeObject() и readObject() можно применять последовательно. Только в случае чтения нужно соблюдать порядок.
|
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Проблема состоит в том, что ObjectOutputStream пишет в начало потока специальную сигнатуру, и 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. |
|||
|
||||
Grelloo |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 153 Регистрация: 18.3.2006 Где: г. Екатеринбург Репутация: нет Всего: нет |
||||
|
||||
WandM |
|
||||
Новичок Профиль Группа: Участник Сообщений: 28 Регистрация: 20.11.2005 Где: Питер Репутация: нет Всего: нет |
А как реализовать этот
![]() Все дело в том, что если наследовать от ObjectInputStream, то метод readObject объявлен final, разрешено переопределить метод readObjectOverride, который будет вызываться, только если private флажок enableOverride стоит true. enableOvveride ставится true только в конструкторе ObjectInputStream() без параметров. Конструктор ObjectInputStream(InputStream in) вызывать в таком случае нельзя. Так получается, что я должен нехилую кучу методов переопределить и связать мой класс с DataInputStream сам! Мне всего лишь нужно, чтобы было так:
И, заодно, в конструкторе ObjectInputStream(InputStream in) убрать readStreamHeader(); |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Под "своим механизмом сериализации" я имел в виду следующее: определяем свой интерфейс MySerializable, в которос определяем методы: serialize() и deserialize(). А как именно сохранять свои поля, уже решает сам объект. В принципе это аналог Externalizable, только сохранять можно в произвольные форматы, например XML.
-------------------- 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. |
|||
|
||||
sergakrem |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 38 Регистрация: 28.7.2006 Где: Украина, г. Киев Репутация: нет Всего: нет |
Доброе время суток.
От себя скажу вот что: 1. С сериализацией объектов (serailizable ![]() 2. Вот буквально только что использлвал такой вот метод: а. Берется с Апача библиотека common beanutils б. Делается следующая штука (очень удобно, и судя по первоначальной постановке вопроса - именно то, что нужно):
При этом объект BgSearchingItem является обыкновенным JavaBean'ом и соответствует правилам определения для JavaBean'ов и в итоге вся инфа сохраняется (а затем читается) вот в таком вот преприятнейшем формате:
Я думаю - при первоначально постановке вопроса - это то что нужно. Это сообщение отредактировал(а) sergakrem - 14.9.2006, 13:23 |
||||
|
|||||
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. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |