2013-10-06 206 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,這些東西的數組.. –