![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Здравствуйте.
Вот такая ситуация есть класс
ищу функцию, которая-бы переводила-бы переменную структуры в byte[]. Как лучше сделать? Другими словами делаю модель сетевых протоколов и мне нужно сначала заполнить структуру TransportPacket, а потом получить byte[] из этой структуры что-бы передать нижнему уровню. |
|||
|
||||
| dobrolub |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 385 Регистрация: 18.12.2009 Где: Vancouver, Canada Репутация: 11 Всего: 16 |
hessian – удобный бинарный протокол. рекомендую. http://hessian.caucho.com/
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Не я смысле сам пишу модель
Добавлено через 58 секунд Мне просто надо найти функцию на которую я подаю структуру [+ размер] и получаю byte[]. Добавлено через 4 минуты и 13 секунд Хотя в принципе я могу сам это всё дело написать. Я просто хотел-бы узнать что уже есть стандартное. |
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
Стандартно для этого применяются ObjectOutputStream(Object -> byte[]) и ObjectInputStream(byte[] -> Object)
Только объекты обязательно должны быть помечены как сериализуемые, для этого достаточно указать, что класс реализует интерфейс Serializable. Единственное что останется сделать - это реализовать OutputStream и InputStream. Т.е. Object -> byte[] будет выглядеть так
Это сообщение отредактировал(а) pathfinder - 20.5.2010, 21:25 |
|||
|
||||
| Ak47black |
|
||||||||||||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
А вот так как-то получится у меня сделать?
И сама функция
При выполнении вот тут
получаю
Функцию вызываю с
Добавлено через 4 минуты и 27 секунд По идее
Это сообщение отредактировал(а) Ak47black - 20.5.2010, 21:40 |
||||||||||||
|
|||||||||||||
| pathfinder |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
Все решение задачи заключается в реализации OutputStream, например вот так
пользоваться этим вот так
Это сообщение отредактировал(а) pathfinder - 20.5.2010, 22:10 |
||||
|
|||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Ну я хотел-бы всётаки сделать с моим кодом что-то.
Ведь по идее он почти рабочий. (так со стандартным я теперь вижу что труднее) Это сообщение отредактировал(а) Ak47black - 20.5.2010, 22:09 |
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
В Java нельзя ссылку на объект интерпритировать как указатель на область памяти. System.arraycopy нельзя рассматривать как аналог функции memcopy.
Через ObjectOutputStream удобнее сразу же писать Socket. |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Не ну тут наверно как-то всеравно можно без ObjectOutputStream обойтись. Мне же только всеволищь нужно получить byte[]
|
|||
|
||||
| COVD |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Это сообщение отредактировал(а) COVD - 20.5.2010, 22:38 |
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Не у Вас не универсальная функция
Я просто будут делать классы для пакетов имеющие разные переменные, но все наследующие класс Packet который имеет поле size. |
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
ObjectOutputStream это стандартный способ.
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
+
Хорошо, а кто-нибудь может ещё как-то подправить мой код что-бы он работал? |
|||
|
||||
| pathfinder |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 120 Регистрация: 3.3.2010 Репутация: 2 Всего: 10 |
Извиняюсь вопрос не понял. Способ COVD-а классный.
|
|||
|
||||
| Ak47black |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 2205 Регистрация: 2.12.2005 Репутация: нет Всего: 0 |
Там реализация для конкретно взятого класса, а мне нужно сделать функцию, которую можно было-бы применить для почти любого класса который наследуется от класса Packet.
Это сообщение отредактировал(а) Ak47black - 20.5.2010, 22:55 |
|||
|
||||
![]()
|
| Правила форума "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. |