我试图通过网络从一个设备发送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