我定义了一个类,然后我实现了该类类型的对象。我想将此对象透明地发送到另一台计算机上运行的另一个Java应用程序。实现这一目标的最佳技术是什么?
答案 0 :(得分:11)
您将首先考虑使用Java Serializable接口进行序列化。 Sun有一篇很好的文章称为Discover the secrets of the Java Serialization API。
有关通过网络实际传输序列化对象的信息,请参阅Java Sockets tutorial。
答案 1 :(得分:8)
您可以使用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();
答案 2 :(得分:6)
有很多方法可以做到这一点。以下是一些需要研究的内容,您可以选择最适合您应用的内容。
几乎任何通信框架都允许您以某种方式通过网络推送对象。您只需要查看它们,看看哪些适用于您的应用程序。快速谷歌应该找到更多的方法。
答案 3 :(得分:2)
实现此目的的一个(事实上的)标准是使用 Web服务,例如使用捆绑在Java 6中的JAX-WS。请参阅this tutorial java-first示例(即使用注释)。这非常简单直接。
还有其他方法,如Serialization
,Socket,RMI,EJB,但是,当在互联网上工作时,Web服务是一种自然选择,因为它们依赖于现有标准(SOAP, HTTP)并轻松处理防火墙(对于所有其他解决方案,这可能一个真正的问题)。
答案 4 :(得分:2)
Java使用ObjectOutputStream(和ObjectInputStream)提供(二进制)对象序列化。您可以将writeObject()放入流中,将readObject()放在另一端。您需要做的就是实现Serializable接口。
但是,不是手动执行此操作,您可能有兴趣将其升级为一级并使用远程方法调用。使用RMI,您可以在另一个JVM中的对象上调用方法,并且所有序列化和网络都在幕后进行。
为了完整起见,还有XML bean序列化,如果你不能使用二进制格式。这种XML格式非常通用(阅读:冗长和丑陋),但有一些流行的库(如XStream)可以创建替代的XML序列化。