2013-10-06 204 views
2

我试图通过网络从一个设备发送Bundle到另一个使用ObjectInputStreams和这样的。问题是,Bundle不可序列。有没有简单的方法来实现这一点?我想使用Bundle,因为我可以发送各种类型的字符串(int,int,parcelables,lists等)发送包通过网络

+6

我会强烈建议使用比'ObjectInputStream'其他任何东西,在利益控制和跨平台的兼容性:JSON,XML,protobuf的,节俭等 – CommonsWare

+1

为什么跨平台?它只是Android,对于这个应用程序,没有iOS,Web等选项。不过谢谢你的建议 – dumazy

+4

“这只是Android的” - 这是唯一的Android ** **今天。有才华的程序员使用线上数据格式,为将来提供灵活性。 – CommonsWare

回答

2

您不应该序列化Bundle,因为它不能保证版本兼容性。所以如果你可以确保每个设备使用完全相同的版本,你应该没问题。但我真的不会推荐这个。每个API都表示不应该这样做!

包裹是不是一个通用的序列化机制。此类 (以及用于将任意对象 放入Parcel的相应Parcelable API)设计为高性能IPC传输。由于 等原因,将任何Parcel数据放入持久存储区是不合适的:Parcel中任何数据 的底层实现的更改都可能导致旧数据无法读取。

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,这些东西的数组.. –