![]() |
|
Модераторы: javastic, AntonSaburov |
![]()
|
|
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
Всем доброго времени суток! Можно ли каким-нибудь образом записать объект в rms? Или как получить набор байт объекта?
|
|||
|
||||
| ecologist |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 452 Регистрация: 28.2.2007 Репутация: нет Всего: 9 |
||||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Да, можно так Еще есть такая библиотечка. Не пробовал, но, судя по API, который она дает, - то, что доктор прописал. Или можно еще портировать ObjectOutputStream из исходников Java SE, но там много и, пожалуй, чересчур сложно для небольшой задачи. Замечательный API дает Polish: J2ME polish serialization, но, прежде чем привязываться к Polish ради одной только сериализации, стоит сто раз подумать, тем более если создаваемое приложение коммерческое... |
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
В этой статье показан пример с записью строки в rms... А как объект то записать? Мне свой класс нужно записать в rms... |
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
||||
|
||||
| AntonSaburov |
|
|||
![]() Штурман ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 5658 Регистрация: 2.7.2002 Где: Санкт-Петербург Репутация: нет Всего: 118 |
Но класс же все равно надо сериализовать - сделать его Serializable может и хватит
|
|||
|
||||
| Brodyaga |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
Нет
А так совсем и нельз получается? Просто это самый лёгкий способ, вот и хотел узнать, может действительно както так и можно исхитрица? или всётаки я прав по поводу того, что этот вариант только для строк подходит? Добавлено через 3 минуты и 13 секунд
в J2ME нет Serializable класса... так что буду смотреть вариант Dummy... |
||||
|
|||||
| Brodyaga |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
Чтото я не понял в этом примере...
...каким макаром запись объекта получается...
Поясните плиз, Нафига имя класса записывается, а потом опять же этот метод вызывается... Поясните плиз? |
||||
|
|||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
На самом деле так, как описано в статье на http://developers.sun.com/mobility/midp/articles/persist/, делать можно для любого типа. Вопрос в том, нужно ли. К сожалению, в этой статье задача показана только на простейшем и не слишком полезном примере, когда тип объекта - String. К чему приведет попытка расширения такого решения:
ИМХО, такой дизайн нехорош, гораздо лучше доверить объекту самому представлять себе в виде последовательности байт. Как это сделать - я уже говорил . |
|||
|
||||
| Brodyaga |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
Значит так нельзя?
Нужно только каждое свойство класс отдельно записывать? |
||||
|
|||||
| Dummy |
|
||||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Имя класса пишется для того, чтобы можно было по нему потом создать инстанс класса. А в остальном - пожалуй, несколько странный там дизайн написан, я что-то проглядел
Соответственно, мы создаем определяем интерфейс Serializable следующим образом:
и твой объект:
Добавлено @ 14:35
writeUTF() только строки принимает. Добавлено @ 14:40 Да, и еще...
Это я точно погорячился))) Заглянул в исходники - там работа через Reflection идет, так что в J2ME это точно не получится. Вариант отпадает. Это сообщение отредактировал(а) Dummy - 30.10.2008, 14:41 |
||||||||||||||
|
|||||||||||||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
ну это всё архитектура.. общий принцип таков: нужно получить байты значений свойств класса, слепить их, и закинуть в rms, а потом также последовательно считать, создать новый объект и закинуть их туда. Так?
|
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Да
|
|||
|
||||
| MoZy |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 193 Регистрация: 4.6.2006 Репутация: нет Всего: 0 |
Но ведь какой бы сложности/вложенности классы ни были, базовых типов немного.. реализовать для каждого такого типа функцию дампа.. а в конечном классе (и всех вложенных), в Основной процедуре дампа, составить нужную сиквенцию вызовов для каждой значимой переменной. Читать так же..
Где сложность? непонятно Это сообщение отредактировал(а) MoZy - 30.11.2008, 23:24 --------------------
Experimentia est optima rerum magistra |
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Прошу прощения, не понял, к чему это было написано и какую новую информацию содержит. |
|||
|
||||
| math64 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2505 Регистрация: 12.4.2007 Репутация: 8 Всего: 72 |
Для записи объекта можно реализовать метод toString() так чтобы он выдавал всю информацию об объекте, и записывать эту строку в rms. Для чтения создать конструктор с аргументом String.
|
|||
|
||||
| zzzvyk |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 64 Регистрация: 21.4.2007 Где: Киев Репутация: нет Всего: нет |
Когда я столкнулся с данной проблемой, то за основу взял вот это
http://www.garret.ru/serme.html Единственное, что мне не нравиться, это то, что не получиться использовать обфускатор для классов реализующих данный интерфейс. |
|||
|
||||
| Brodyaga |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 599 Регистрация: 19.1.2008 Репутация: 2 Всего: 2 |
Тоесть эти кракозяблики и есть объект!? Тоесть если я создам прочитаю это в объект то значения всех переменных сохранятся? |
|||
|
||||
| Dummy |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 263 Регистрация: 21.5.2007 Репутация: 7 Всего: 19 |
Предположим, у тебя есть класс MyCoolIO в пакете com.brodyaga.io. По умолчанию MyCoolIO.toString() будет возвращать строку вида "com.brodyaga.io.MyCoolIO@12345678"? Эти кракозяблики ты имеешь в виду? Это дефолтная реализация Object.toString(), которая к имени класса объекта (то, что в кракозябликах идет до символа "@") добавляет значение его хэша (после "@"). Никакой информации об объекте, кроме разве что имени класса, из него при десериализации извлечь не получится. math64 имел в виду то, что ты для своего класса должен переопределить метод toString() таким образом, чтобы результирующая строка содержала информацию о классе и значениях его полей в некотором формате (ну, например, структуру класса в виде XML-документа или что-то поумнее). |
|||
|
||||
| Выхухоль |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 9.10.2008 Где: Ташкент Репутация: 2 Всего: 2 |
кстати ща тоже использую rms для хранения объектов , тока чото нифига не получается..
не могу понять в чем проблема в примере я сделал сериализацию для одного класса сама запись проходит на ура а десириализация не проходит...
в строке DeSerialize String Discript = dis.readUTF(); вылетает EOFException почему????????? Ну вообщемто ясен файл закончился токо опять же ПОЧЕМУ??никак не въеду ужо три часа маюся... Это сообщение отредактировал(а) Выхухоль - 3.12.2008, 20:10 |
|||
|
||||
| eugine_s |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 14.11.2007 Где: Киев Репутация: 17 Всего: 17 |
Ты в каком порядке сохраняешь поля объекта?
Вот в таком порядке и доставай их: т.е. сначала Boolean, потом Int а потом 4-ре UTF (ну и эти строки alias, title - тоже читай в том порядке в каком записывал.
Советую посмотреть на пример обычной java (j2se), открыть поток к файлу и записать в него Int, Bool, UTF - и посмотреть потом в редакторе что в этот файл записалось.. Да, и еще одно, в конце сериализации dos.flush() - раскоментируй назад. |
||||
|
|||||
| Выхухоль |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 9.10.2008 Где: Ташкент Репутация: 2 Всего: 2 |
eugine_s, пасиба
да просто дебил на форуме отписал , а я с его примера и делаю...там у него было сериализация в одном порядке а десир в другом...вот и доверяй после этого людям =( |
|||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
Это сообщение отредактировал(а) W0LF - 4.12.2008, 22:49 -------------------- iOS developer |
|||
|
||||
| Выхухоль |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 9.10.2008 Где: Ташкент Репутация: 2 Всего: 2 |
||||
|
||||
| W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: 19 Всего: 20 |
никоим образом обидеть не хотел -------------------- iOS developer |
|||
|
||||
![]()
|
FAQ раздела лежит здесь! |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java ME (J2ME) | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |