我試圖通過網絡從一個設備發送Bundle
到另一個使用ObjectInputStreams
和這樣的。問題是,Bundle
是不可序列。有沒有簡單的方法來實現這一點?我想使用Bundle
,因爲我可以發送各種類型的字符串(int,int,parcelables,lists等)發送包通過網絡
發送包通過網絡
回答
您不應該序列化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
是的,我知道包裹不起作用。我正在尋找一種替代方案..它可能不是一個捆綁軟件,只要我可以使用它來傳輸任何東西。 –
@Roque:「只要我可以用它來傳輸任何東西」 - 根據定義,你不能傳輸「任何東西與它」的任何值「它」。有許多數據結構,如開放式套接字,無法通過進程邊界傳遞,更不用說通過網絡。 – CommonsWare
然後讓我們將其限制爲Java/Android的主要類型。 Float,String,Int,這些東西的數組.. –
- 1. 通過3G網絡發送數據包
- 2. 通過網絡發送的
- 3. 通過網絡發送UITouches
- 4. 網絡 - 通過發送端口
- 5. 發送CTRL-C通過網絡
- 6. 通過網絡發送字符串
- 7. 如何通過網絡發送消息?
- 8. 通過網絡發送對象向量
- 9. 通過網絡發送信息
- 10. 通過網絡發送對象
- 11. 通過網絡發送屏幕截圖
- 12. 通過網絡發送按鍵
- 13. 通過網絡發送sqlite數據庫
- 14. 通過網絡發送數據
- 15. 通過網絡發送結構
- 16. 如何通過網絡發送FlatBuffers ByteBuffer?
- 17. 通過網絡發送密碼
- 18. 通過網絡發送文件夾
- 19. 通過網絡發送基本信息
- 20. 通過網絡發送Outlook實例
- 21. 修改通過接口發送的所有網絡數據包
- 22. 在通過網絡發送之前捕獲我的數據包
- 23. 使用winsock通過網絡發送Unicode(win32)文本數據包?
- 24. 通過網絡內的網絡發送數據
- 25. Java如何通過網絡通過UI按鈕發送數據
- 26. 通過網絡服務發送通知到Android手機
- 27. 如何通過網絡瀏覽器發送發佈請求
- 28. 通過winsock發送包?
- 29. 通過網址發送$ POST
- 30. 捕獲網絡攝像頭流,並通過網絡使用DirectShow.net發送
我會強烈建議使用比'ObjectInputStream'其他任何東西,在利益控制和跨平臺的兼容性:JSON,XML,protobuf的,節儉等 – CommonsWare
爲什麼跨平臺?它只是Android,對於這個應用程序,沒有iOS,Web等選項。不過謝謝你的建議 – dumazy
「這只是Android的」 - 這是唯一的Android ** **今天。有才華的程序員使用線上數據格式,爲將來提供靈活性。 – CommonsWare