4

我正在用 Java 编写手机应用程序。它的目标是向服务器发送和接收 Vector 对象。但是在这里我遇到了一个问题:J2ME 不ObjectOutputStream支持。所以我必须将我的转换Vectorbyte数组或做类似的事情。

我一直在考虑将 转换Vectorstring,通过网络传输它并从字符串中重建原始向量,但它似乎很难以适当的形式工作。

另外,我查看了一些框架,例如J2ME Polish,但不幸的是,我未能在安装文件夹中找到带有 API 的 jar 文件。

那么,有什么想法吗?

4

1 回答 1

3

有两种相对简单的方法可以将 Java 对象序列化和反序列化为其二进制表示,以促进服务器和 Java ME 设备之间的网络通信:

  1. 协议缓冲区

    协议缓冲区是 Google 创建的,用于通过网络快速实现非常有效的数据交换。您定义一个“protobuf”文件,该文件是您要交换的对象的规范,然后 protobuf 工具创建客户端和服务器端存根以通过网络连接处理对象的序列化和反序列化。

    基于“第三方插件页面”,有几个 Java ME 项目用于处理 Java ME 上的协议缓冲区。还有许多其他语言库,因此这种方法也应该为您提供大量服务器端实现选项。我个人没有在 Java ME 上使用过这种方法。

  2. Netbeans 的“移动客户端到 Web 应用程序”工具

    如果您的服务器端实现使用 Java,您可以使用 Netbeans 的“移动客户端到 Web 应用程序”工具生成服务器端和客户端存根,以通过二进制数据流发送 Java 对象。上面的链接是一个很好的详细实现教程。

    一般步骤是:

    a) 在 Java EE 中定义您的服务器端 Web 服务,包括您希望通过网络连接传递的对象。

    b) 运行“移动客户端到 Web 应用程序”工具以生成客户端和服务器端存根。

    我已经在几个 Java ME 应用程序中使用了这种方法,并且效果很好。这种方法的优点是您可以查看和编辑生成的存根的所有源代码,因为它就在您的项目中。可能的缺点是它需要服务器端代码的 Java 实现,并且不像协议缓冲区那样可移植到其他平台。

于 2012-10-29T19:49:43.533 回答