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

我应该使用什么库? 有什么function可以帮到我?

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

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

的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(); 

这取决于:

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

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

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

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

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

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