【问题标题】:Sending an object over the Internet通过 Internet 发送对象
【发布时间】:2009-12-19 00:28:58
【问题描述】:

我定义了一个类,然后我创建了一个该类类型的对象。我想将此对象透明地发送到在另一台计算机上运行的另一个 Java 应用程序。实现这一目标的最佳技术是什么?

【问题讨论】:

  • 您的意思是——卫星、互联网或 AM/FM 收音机?或者如果没有,我们可以看看这堂课吗?给我们代码伙计! \o/ 随便!只要它还在动,一点点..
  • 顺便说一句,您要求最好的技术来完成您的问题,而不是示例代码如何做到这一点。这就是为什么你有 3 个关于使用技术的答案。如果您想要示例代码,请索取示例代码,您将获得来自多人的示例代码,说明如何使用不同的技术或使用相同的技术,但您将有更多选择。

标签: java networking serialization


【解决方案1】:

您首先要研究使用 Java Serializable 接口的序列化。 Sun 有一篇很好的文章,叫做Discover the secrets of the Java Serialization API

有关通过网络实际传输序列化对象的信息,请参阅Java Sockets tutorial

【讨论】:

    【解决方案2】:

    您可以使用 java API 创建对象流并发送任何可序列化的对象。但您必须注意这些通过网络未加密:

    在发送方:

    CustomObject objectToSend=new CustomObject();
    Socket s = new Socket("yourhostname", 1234);
    ObjectOutputStream out = new ObjectOutputStream(s.getOutputStream());
    out.writeObject(objectToSend);
    out.flush();
    

    在接收端:

    ServerSocket server = new ServerSocket(1234);
    Socket s = server.accept();
    ObjectInputStream in = new ObjectInputStream(s.getInputStream());
    CustomObject objectReceived = (CustomObject) in.readObject();
    

    【讨论】:

      【解决方案3】:

      有很多方法可以做到这一点。以下是一些需要研究的事项,您可以选择最适合您的应用程序的事项。

      • J2EE
      • RMI
      • 对象序列化将位推送到套接字上
      • 网络服务

      几乎任何通信框架都允许您以一种或另一种方式通过网络推送对象。您只需要查看它们并查看哪些适用于您的应用程序。一个快速的谷歌应该找到更多的方法。

      【讨论】:

        【解决方案4】:

        实现这一点的(事实上的)标准是使用 Web 服务,例如使用捆绑在 Java 6 中的 JAX-WS。有关 java-first 示例,请参阅 this tutorial (即使用注释)。这非常简单明了。

        还有其他方法,例如 Serialization 而非 Socket、RMI、EJB,但在 Internet 上工作时,Web 服务是一种自然选择,因为它们依赖于现有标准(SOAP、HTTP)和处理轻松使用防火墙(对于所有其他解决方案而言,这可能是一个真正的问题)。

        【讨论】:

          【解决方案5】:

          Java 使用 ObjectOutputStream(和 ObjectInputStream)提供(二进制)对象序列化。您可以只将 writeObject() 写入流中,然后将 readObject() 放在另一端。为此,您需要做的就是实现 Serializable 接口。

          但是,您可能有兴趣将其提升一个层次并使用远程方法调用,而不是手动执行此操作。使用 RMI,您可以调用位于另一个 JVM 中的对象的方法,所有的序列化和网络都在后台进行。

          而且为了完整起见,如果不能使用二进制格式,还有 XML bean 序列化。这种 XML 格式非常通用(阅读:冗长和丑陋),但有一些流行的库(如 XStream)可以创建替代的 XML 序列化。

          【讨论】:

            猜你喜欢
            • 2012-06-19
            • 2015-10-04
            • 1970-01-01
            • 1970-01-01
            • 2015-05-06
            • 2014-09-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多