4

我正计划开发一个需要后端服务器与应用程序的其他用户同步数据的安卓应用程序。我打算用在 unix 服务器上运行的标准 java 编写这个服务器。

我曾经直接在两个 android 设备之间执行此操作,在这种情况下,我只是序列化了所有需要在两端发送的数据。

但是我怀疑 Dalvik 序列化的格式和 Java SE 的格式不兼容。是这样吗?如果是的话,我的选择是什么?我突然想到的一件事是通过套接字发送原始 xml,但如果有更好的选择,我会很高兴听到它们。

谢谢。

4

6 回答 6

6

如果你正在做一个服务器,那么你应该依赖更标准的东西,比如 XML 或 JSON。我个人喜欢 JSON。您不应该期望您的所有客户端都对 Java 友好。几乎所有移动设备都支持 JSON。查看Jackson库以生成您的 json。然后你可以再次使用 Jackson 来反序列化你的对象。

这个解决方案的美妙之处也很简单。您只需将请求放入浏览器即可查看内容。二进制数据并不容易。

于 2011-01-24T16:56:53.570 回答
3

我已经在 Android 设备和服务器之间成功使用了数据序列化。

我确实必须将TimeZone类转换为 String 并返回,因为TimeZone该类特别不完全兼容(它尝试在 Android 上的sun.包中传输一些东西)。ClassNotFoundException

除此之外,我已经能够从java.util集合和映射以及java.sql数据类型,当然还有java.lang类型StringInteger等传输对象。

于 2011-01-24T16:56:25.107 回答
2

您可以尝试使用protobuf进行序列化。据说效率更高,而且你不会担心兼容性。

您还可以使用某种形式的 XML 序列化(JAXB、XStream、XMLEncoder 等)

这个问题的解决方法暗示它兼容的。

于 2011-01-24T16:53:02.657 回答
1

如果您的对象图非常简单并且您对 JSON 完全满意,那么 Android 包含JSON 支持,并且很容易在 Java SE 中获得支持。当 XML 或 Java 序列化似乎“繁重”时,我倾向于认为 JSON 是一个很好的选择。

于 2011-01-24T16:55:12.650 回答
1

看看这个基准。Kryo是我正在使用的。它支持创建自定义二进制序列化,这可以以适合 Dalvik 和 JSE 的方式完成。

您可能想查看一个相关问题,该问题提供了额外的讨论和链接。

于 2011-01-24T17:09:39.303 回答
0

协议缓冲区将是一种值得考虑的良好格式。

我无法谈论 Dalvik 的连载。

于 2011-01-24T16:51:59.193 回答