2013-10-06 5 views
2

Я пытаюсь отправить Bundle по сети с одного устройства на другое с помощью ObjectInputStreams и т. Д. Проблема в том, что Bundle является не serializable. Есть ли простой способ сделать это? Я хочу использовать Bundle, потому что я могу отправлять все типы типов (String, int, parcelables, lists и т. Д.)Отправить комплект поставки по сети

+6

Я настоятельно рекомендую использовать что-либо, кроме 'ObjectInputStream', в интересах контроль и кросс-платформенная совместимость: JSON, XML, protobuf, Thrift и т. д. – CommonsWare

+1

Почему кросс-платформенный? это только Android, для этого приложения нет возможности для iOS, Интернета и т. д. Но спасибо за совет – dumazy

+4

«это только Android» - это только Android ** сегодня **. Талантливые программисты используют встроенные форматы данных, которые обеспечивают гибкость в будущем. – CommonsWare

ответ

2

Вы не должны сериализовать пакет, поскольку он не гарантирует совместимость версий. Поэтому, если вы можете убедиться, что все устройства используют ту же самую версию, вы должны быть в порядке. Но я бы не рекомендовал этого. Каждый 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 
+0

Да, я знаю, что парцелла не работает. Я ищу альтернативу. Это может быть нечто иное, чем пакет, если я могу использовать его для передачи чего-либо с ним. –

+0

@Roque: «при условии, что я могу использовать его для передачи чего-либо с ним» - по определению вы не можете передавать «что-нибудь с ним» для любой ценности «это». Существует множество структур данных, таких как открытые сокеты, которые не могут быть переданы через границы процесса, не говоря уже о сети. – CommonsWare

+0

Давайте ограничим его «я» к основным типам Java/Android. Float, String, Int, массивы этих вещей .. –

Смежные вопросы