Я пытаюсь отправить 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, массивы этих вещей .. –
Я настоятельно рекомендую использовать что-либо, кроме 'ObjectInputStream', в интересах контроль и кросс-платформенная совместимость: JSON, XML, protobuf, Thrift и т. д. – CommonsWare
Почему кросс-платформенный? это только Android, для этого приложения нет возможности для iOS, Интернета и т. д. Но спасибо за совет – dumazy
«это только Android» - это только Android ** сегодня **. Талантливые программисты используют встроенные форматы данных, которые обеспечивают гибкость в будущем. – CommonsWare