Я пытаюсь отправить Bundle
по сети с одного устройства на другое с помощью ObjectInputStreams
и т. Д. Проблема в том, что Bundle
является не serializable. Есть ли простой способ сделать это? Я хочу использовать Bundle
, потому что я могу отправлять все типы типов (String, int, parcelables, lists и т. Д.)Отправить комплект поставки по сети
ответ
Вы не должны сериализовать пакет, поскольку он не гарантирует совместимость версий. Поэтому, если вы можете убедиться, что все устройства используют ту же самую версию, вы должны быть в порядке. Но я бы не рекомендовал этого. Каждый api утверждает, что этого не должно быть!
Посылка не является универсальным механизмом сериализации. Этот класс (и соответствующий API-интерфейс Parcelable для размещения произвольных объектов в парцеллу) разработан как высокопроизводительный транспорт IPC. Так как такой, нецелесообразно помещать данные посылок в постоянное хранилище : изменения в базовой реализации любого из данных в Посылке могут отображать старые данные нечитабельно.
https://developer.android.com/reference/android/os/Parcel.html
Но если вы действительно хотите сделать это, вот способ ее реализации:
Bundle in = ...;
OutputStream os = ...
Parcel p = Parcel.obtain(); //create empty parcel object
in.writeToParcel(p, 0); //saving bundle as parcel
os.write(p.marshall()); //write parcel to stream
Да, я знаю, что парцелла не работает. Я ищу альтернативу. Это может быть нечто иное, чем пакет, если я могу использовать его для передачи чего-либо с ним. –
@Roque: «при условии, что я могу использовать его для передачи чего-либо с ним» - по определению вы не можете передавать «что-нибудь с ним» для любой ценности «это». Существует множество структур данных, таких как открытые сокеты, которые не могут быть переданы через границы процесса, не говоря уже о сети. – CommonsWare
Давайте ограничим его «я» к основным типам Java/Android. Float, String, Int, массивы этих вещей .. –
- 1. Комплект поставки не удался
- 2. Комплект поставки: разрешение отклонено
- 3. Jammit и Grouped Комплект поставки
- 4. специальный комплект поставки gem rails?
- 5. Не удается понизить комплект поставки
- 6. Вставка изображения в комплект поставки
- 7. Порядок элементов в наборе ключей Комплект поставки
- 8. Комплект поставки груза Magento, включая отключенные продукты
- 9. Добавить настраиваемые продукты в комплект поставки
- 10. Комплект поставки vuejs 2 компонента с webpack
- 11. Перекрестная проверка и отдельный «комплект поставки»
- 12. Комплект поставки с использованием старых рубигемов версии
- 13. Комплект поставки не находит мой драгоценный камень!
- 14. Вызов поля внутри входящей в комплект поставки
- 15. Комплект поставки Magento необходимо отобразить на складе
- 16. Комплект поставки --target =. Alfred-Workflow дает ошибку
- 17. Отправить строки по сети
- 18. Отправить UITуши по сети
- 19. Модуль распространяется одновременно и входит в комплект поставки?
- 20. Поддержание аутентификации между клиентом WCF и службой? (Рабочий комплект поставки)
- 21. Комплект поставки висит в Jruby с рельсами 4.2
- 22. $ GEM не входит в комплект поставки. Добавьте его в Gemfile
- 23. отправить CTRL-C по сети
- 24. Как отправить сообщение по сети?
- 25. Отправить файлы по сети - JAVA
- 26. Отправить графический объект по сети
- 27. Отправить нажатия клавиш по сети
- 28. Ошибка проверки. В комплект поставки входят запрещенные вложенные пакеты.
- 29. spark-shell, объект XXX не входит в комплект поставки YYY
- 30. Отсутствует необходимый файл значка. В комплект поставки не содержит
Я настоятельно рекомендую использовать что-либо, кроме 'ObjectInputStream', в интересах контроль и кросс-платформенная совместимость: JSON, XML, protobuf, Thrift и т. д. – CommonsWare
Почему кросс-платформенный? это только Android, для этого приложения нет возможности для iOS, Интернета и т. д. Но спасибо за совет – dumazy
«это только Android» - это только Android ** сегодня **. Талантливые программисты используют встроенные форматы данных, которые обеспечивают гибкость в будущем. – CommonsWare