Обычная версия
Java форум JavaTalks
форум программистов

Поиск   Пользователи   Группы   Регистрация 
 Профиль   Личные сообщения 

 Вход 

Сериализируется или нет
Список форумов
 ->  Сериализация (Serialization API)


На страницу 1, 2  След. 
Начать новую тему 
Предыдущая тема :: Следующая тема  
Автор Сообщение
grass : 144
Новичок

СообщениеМар 09, 2010 21:40 
Ответить с цитатой
Приветствую =)

Вопрос наверное из серии ЧаВо , но заинтересовал... А именно:
Как узнать какой объект годится для сериализации, а какой нет?

Вот к примеру Image - не подходит для сериализации, но не ясно есть ли внутренний метод или что, чтобы заранее узнать можно ли сериализовать этот объект или нет?

Жду полезных коментариев
К началу Посмотреть профиль Отправить личное сообщение
almagnit : 938
Модератор
Откуда: Луганск

СообщениеМар 09, 2010 22:17 
Ответить с цитатой
У сериализации как и любого не явного действия много подводных камней, лучше не усердствуйте.

К примеру класс сериализованного объекта со временем может измениться, а значит десериализация этого объекта в будущем будет ошибочна, это приводит к необходимости поддержки сериализованных объектов в новых версиях проекта.

Так что никаких внутренних методов нет, есть интерфейс, который в свою очередь также накладывает ограничение на сериализуемый класс посредством UID который если не указывать явно, в будущем будет изменяться вместе со структурой класса и если этого не знать, также могут возникнуть ошибки.
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
abihle : 320
Бывалый
Откуда: Одесса

СообщениеМар 09, 2010 22:19 
Ответить с цитатой
Если мне не изменяет память, то такие классы должны реализовывать соответствующий интерфейс, методов в котором ни каких не отделено, он является лишь меткой.
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
Jean : 1992
JavaTalks Team Member
Откуда: Санкт-Петербург

СообщениеМар 10, 2010 2:46 
Ответить с цитатой
grass писал(а):
Как узнать какой объект годится для сериализации, а какой нет?

Я бы сказал, что вас интересует вопрос терминологии...
Сериализация - это преобразование объекта в набор байт для передачи куда-нибудь. Десериализация - обратно. Исходя из этого метод toString любого класса можно считать сериализацией.

Java имеет (неудачные) механизм для сериализации - о нем уже сказали выше. Также есть более удачная реализация, которая тоже входит в стандартный SDK - смотрите интерфейс Externalizable.
Никто не мешает вам реализовать что-то свое и более удобное...
_________________
Всякое решение плодит новые проблемы
К началу Посмотреть профиль Отправить личное сообщение
grass : 144
Новичок

СообщениеМар 10, 2010 4:36 
Ответить с цитатой
almagnit писал(а):
У сериализации как и любого не явного действия много подводных камней, лучше не усердствуйте.

Так что никаких внутренних методов нет, есть интерфейс, который в свою очередь также накладывает ограничение на сериализуемый класс посредством UID который если не указывать явно, в будущем будет изменяться вместе со структурой класса и если этого не знать, также могут возникнуть ошибки.


Спасибо, но я имел ввиду, как узнать что класс годится к сериализаци заранее, но не читать доки к нему... Например если бы я сам писал класс для будущей возможности сериализировать его, то поместил бы в него метод под названием boolean isSerializable(){return true;} или что-то в этом роде. Ну это соц инженерия, а стандартно какие метки используются?
К началу Посмотреть профиль Отправить личное сообщение
sx01 : 96
Новичок
Откуда: Санкт-Петербург

СообщениеМар 10, 2010 16:15 
Ответить с цитатой
Класс, который может быть сериализован должен имплиментировать интерфейс Serializable
К началу Посмотреть профиль Отправить личное сообщение
nazica : 1519
Администратор
Откуда: Donetsk, UA

СообщениеМар 11, 2010 11:01 
Ответить с цитатой
или Externalizable (тогда нужно реализовать вручную метод сериализации и метод десериализации).
_________________
Software and cathedrals are much the same - first we build them, then we pray
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
abihle : 320
Бывалый
Откуда: Одесса

СообщениеМар 12, 2010 15:36 
Ответить с цитатой
Цитата:
как узнать что класс годится к сериализаци заранее

по-моему можно вот так:
object instanceof Serializable
К началу Посмотреть профиль Отправить личное сообщение ICQ Number
grass : 144
Новичок

СообщениеМар 12, 2010 20:25 
Ответить с цитатой
abihle писал(а):
Цитата:
как узнать что класс годится к сериализаци заранее

по-моему можно вот так:
object instanceof Serializable


То есть чисто по схеме проверки экземпляра? Shocked
К началу Посмотреть профиль Отправить личное сообщение
grass : 144
Новичок

СообщениеМар 13, 2010 23:37 
Ответить с цитатой
Jean писал(а):
grass писал(а):
Как узнать какой объект годится для сериализации, а какой нет?

Я бы сказал, что вас интересует вопрос терминологии...
Сериализация - это преобразование объекта в набор байт для передачи куда-нибудь. Десериализация - обратно. Исходя из этого метод toString любого класса можно считать сериализацией.

Java имеет (неудачные) механизм для сериализации - о нем уже сказали выше. Также есть более удачная реализация, которая тоже входит в стандартный SDK - смотрите интерфейс Externalizable.
Никто не мешает вам реализовать что-то свое и более удобное...


Это довольно интересно насчет своей реализации эффекта сериализации. но я не совсем пойму тогда, как можно любой объект преобразовать в биты, чтобы потом помещать в поток? Есть уловки?
К началу Посмотреть профиль Отправить личное сообщение
Jean : 1992
JavaTalks Team Member
Откуда: Санкт-Петербург

СообщениеМар 14, 2010 1:35 
Ответить с цитатой
Стандартный механизм сериализации предполагает имплементацию интерфейса Serializable. Для своей работы он использует два private метода readObоect и writeObject. Если вы хотите изменить логику сериализации и десериализации, то можете явно написать эти (обязательно private) методы со своей логикой и удивиться, что это будет работать. Конструктор объекта для создания нового экземпляра при этом не вызывается. Такая вот чача с вызовом приватных методов какими-то окольными путями...

Если хотите более понятного управления - используйте Externalizable. Идея та же, только есть понятные методы для реализации. Ну и наверняка туториалов в Сети вагон и маленькая тележка.

А можно просто реализовать сохранение полей класса по порядке в массив байт. Все строки преобразуются; дробные числа, целые числа преобразуются. Массив байт можно передать как угодно. Поскольку вы знаете в каком именно порядке сохраняли свои данные в этот массив байт, то не составит труда воспроизвести операцию в обратном порядке. К слову, именно таким образом и работает стандартный механизм.
_________________
Всякое решение плодит новые проблемы
К началу Посмотреть профиль Отправить личное сообщение
grass : 144
Новичок

СообщениеМар 14, 2010 20:18 
Ответить с цитатой
Jean писал(а):


А можно просто реализовать сохранение полей класса по порядке в массив байт. Все строки преобразуются; дробные числа, целые числа преобразуются. Массив байт можно передать как угодно. Поскольку вы знаете в каком именно порядке сохраняли свои данные в этот массив байт, то не составит труда воспроизвести операцию в обратном порядке. К слову, именно таким образом и работает стандартный механизм.


то бишь просто реализовать readBytes() из класса ? Из серии PipedIO ? Very Happy
К началу Посмотреть профиль Отправить личное сообщение
Jean : 1992
JavaTalks Team Member
Откуда: Санкт-Петербург

СообщениеМар 14, 2010 23:01 
Ответить с цитатой
Если вам нужно реализовать некий механизм, то какая разница каким именно образом он будет реализован? Стандартными средствами, каким-нибудь супер фреймворком, вашим велосипедом... пользователю, который будет работать с приложением глубоко фиолетово, как именно оно работает.
_________________
Всякое решение плодит новые проблемы
К началу Посмотреть профиль Отправить личное сообщение
grass : 144
Новичок

СообщениеМар 15, 2010 6:10 
Ответить с цитатой
Jean писал(а):
Если вам нужно реализовать некий механизм, то какая разница каким именно образом он будет реализован? Стандартными средствами, каким-нибудь супер фреймворком, вашим велосипедом... пользователю, который будет работать с приложением глубоко фиолетово, как именно оно работает.

Laughing

Пару оптимальных ссылок не подкините по теме? А то мне попадаются "обрывки газеты" Rolling Eyes
К началу Посмотреть профиль Отправить личное сообщение
Jean : 1992
JavaTalks Team Member
Откуда: Санкт-Петербург

СообщениеМар 15, 2010 10:44 
Ответить с цитатой
Только книги. Я рекомендую Философию Java.
_________________
Всякое решение плодит новые проблемы
К началу Посмотреть профиль Отправить личное сообщение
 
Начать новую тему  Ответить на тему
Страница 1 из 2
На страницу 1, 2  След.
Список форумов
 -> Сериализация (Serialization API)


 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах


Java and all Java-related trademarks and logos are trademarks or registered trademarks of Oracle Corporation in the United States and other countries.
Это сайт не относится к фирме Oracle Corporation и не поддерживается ею.

© 2006-2010 www.javatalks.ru: форум java программистов
Используется скрипт phpBB © 2001, 2010 phpBB Group

Хостинг от bizname.ru