如何使用java在网络上传输对象

时间:2010-06-26 16:58:33

标签: java

我应该使用什么库? 有什么功能可以帮助我?

4 个答案:

答案 0 :(得分:8)

最简单的方法可能是使用serialization。因此,您的对象类必须实现serializable,所以请确保所有成员(原始和大多数标准java类已经这样做)。这允许在运行时在对象实例和字节流之间进行映射。

您还需要一个转换协议。你可以查看RMI,如果你不想通过网络处理流式传输字节流,虽然这并不困难。 但是,使用RMI可以在以后构建更强大的分布式Java应用程序。

答案 1 :(得分:7)

的ObjectOutputStream / ObjectInputStream的。

整个逻辑大致如下。根据您的应用需求进行调整。

发送:

ByteArrayOutputStream baos = new ByteArrayOutputStream();
ObjectOutputStream oos = new ObjectOutputStream(baos);
oos.writeObject(objectToSend);
oos.close();

byte[] bytes = baos.toByteArray();
socket.write(bytes);

接收:

ObjectInputStream ois = new ObjectInputStream(socketInputStream);
MyObject mo = (MyObject)ois.readObject();

答案 2 :(得分:3)

取决于:

如果另一个端点是Java,那么Java序列化可能是最快的实现方式。但是支持Java序列化的注意事项并不是一项微不足道的任务,并且随着时间的推移可能是一件苦差事。只是谷歌“Java序列化陷阱”的一些例子。

如果另一个端点不是Java,或者未来的可维护性和兼容性是目标,那么我建议使用更通用的可重用编码。 为此我会查看Google Protocol Buffers或Apache Thrift(我只能发布1个超链接)。

当然,总是可以选择使用XML来编码对象。 :)

就我个人而言,在我们的项目中,我们一直在使用Google Protocol Buffers,在我看来,不能轻易使用,可维护性,在我们的案例中,最重要的是协议缓冲版本之间的兼容性。

答案 3 :(得分:0)

如果您处于多平台环境中,则可以使用 CORBA 。虽然它有点复杂,因为您可能需要控制两个端点并实现接口定义语言(IDL)绑定。

一个很好的选择是使用 JSON 。您只需将JSON结构映射到Java对象中即可。