首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过套接字传输Android对象?

如何通过套接字传输Android对象?
EN

Stack Overflow用户
提问于 2014-01-22 07:46:16
回答 4查看 1.6K关注 0票数 2

我想通过一个低开销的套接字传输一个Android对象。我应该使用标准的java.io.Serializable还是android.os.Parcel?

谢谢!

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-01-22 08:10:49

如果您的消息更长、更复杂或需要更高的效率,我建议您尝试使用Google协议缓冲区。它们将允许进行一些合理的更改,例如添加新字段、删除以前的可选字段或添加一个全新的结构作为字段。但是,您也将使用真正的setter和getter类(可以是不可变的版本或可变的构建器,您喜欢怎样)。严格控制你所放的东西并不像看上去那么糟糕。

考虑一下XML,但是更小、更快、更简单

序列化对象的主要缺点是而不是,您以后不能更改协议细节。不同的是,如果引入版本号,并且如果希望遗留客户端查找该属性,则不能在JSON中重命名属性名,则可以执行许多兼容的更改。

但是序列化对象是特定于Java的,并且您不能拥有更高效的C++服务器客户端,或者使用,例如,如果您以后决定的话。协议缓冲区是语言中立的。

票数 1
EN

Stack Overflow用户

发布于 2014-01-22 07:58:01

都不是。

包裹是为IPC设计的,其他用途可以说是高效、危险的。文件上说

包不是一个通用的序列化机制.这个类(以及相应的用于将任意对象放置到一个包中的Parcelable )被设计为一个高性能的IPC传输。因此,将任何Parcel数据放置到持久存储中是不合适的:对包中任何数据的底层实现的更改可能会使旧数据不可读。

这也意味着您需要确保远程端拥有完全相同版本的Android和代码,以确保它能够正常工作。

Serializable也有类似的问题,在(android)综述中甚至有一个解决方案的提示:

警告:这个接口限制了它的实现类将来如何改变。通过实现Serializable,您可以将灵活的内存中实现细节公开为严格的二进制表示形式。简单的代码更改--比如重命名私有字段--在已更改的类可序列化时是不安全的。 ..。 推荐的替代方案: JSON简洁、可读性强、效率高.Android包括一个流API和一个用于读写JSON的树API。使用像GSON这样的绑定库直接读写Java对象。

如果您想将数据从一个设备移动到另一个设备,我认为最好为数据创建一个协议,将其传送过来,并使用该数据填充远程对象。JSON可能是个很好的起点。

祝好运!

票数 2
EN

Stack Overflow用户

发布于 2014-01-22 07:51:54

通过套接字传输对象在很大程度上取决于接收对象的内容。通常,这种传输依赖于基于文本的序列化,比如XML或JSON。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21277015

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档