我应该使用什么库? 什么是帮助我的功能?如何使用java通过网络传输对象
回答
最简单的方法可能使用serialization。因此,你的对象类必须实现可序列化,所以有所有的成员(原始和大多数标准的Java类已经这样做)。这允许在运行时在对象实例和字节流之间进行映射。
您还需要一个transer协议。你可以看看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();
是否有一个原因,你写数据到ByteArrayOutputStream而不是直接到SocketOutputStream? – meriton 2010-06-26 18:11:03
没有特别的理由。这只是我通常分割序列化和发送/归档/存储到数据库部分,所以我通过字节[]。正如我在另一个答案中提到的,序列化数据可能不是消息的唯一部分;我可以添加签名,路由,逻辑所需的任何其他内容 – 2010-06-27 14:29:58
这取决于:
如果另一个端点是Java那么Java序列化可能实现的最快方式。但是支持Java序列化的注意事项并不是一项简单的任务,而且可能会随着时间的推移而变得很麻烦。只是谷歌“Java序列化陷阱”的一些例子。
如果其他端点不是Java或未来的可维护性和兼容性是一个目标,那么我会建议更广泛的可重复使用的编码。 为此,我会考虑Google Protocol Buffers或Apache Thrift(我只能发布1个超链接)。
当然,总会有使用XML来编码你的对象的选项。 :)
个人来说,在我们的项目中,我们一直在使用谷歌协议缓冲器,在我看来,不能被打败的易用性,可维护性,并在我们的情况下,最重要的,协议缓存版本之间的兼容性。
如果你是在多平台环境中,你可以使用CORBA。虽然它有点复杂,因为您可能需要控制两个端点并实现接口定义语言(IDL)绑定。
一个好的方法是使用JSON。您只需将JSON结构映射到您的Java对象。
- 1. 使用Java RMI时,是否通过网络传输序列化对象?
- 2. 通过网络传输java.lang.reflect.Proxy
- 3. 通过网络传输int
- 4. 如何使用WCF C通过互联网传输对象p2p#
- 5. 通过网络在每个字段上传输对象
- 6. 如何使用C++通过网络传输缓冲区?
- 7. 如何使用套接字通过网络传输数据?
- 8. 如何通过网络传输大文件/目录使用AsyncSocket
- 9. 如何通过Wifi网络传递NSData对象?
- 10. 通过使用Java的网络发送对象
- 11. 如何使用Kryonet通过网络发送对象?
- 12. 通过Pyro传输对象
- 13. 通过网络传输GetBitmapBits(),安全吗?
- 14. 通过网络传输文件
- 15. 通过网络流式传输图像
- 16. 通过网络传输目录结构
- 17. 通过网络传输手写信息
- 18. 通过网络传输UUID和字节
- 19. 通过套接字使用ObjectStreams来传输Java密钥对象
- 20. 展示传递jQuery对象,以网络API通过Ajax调用
- 21. 是否可以通过Man In The Middle攻击将代码注入通过网络传输的Java对象?
- 22. 如何通过网络传递cv :: Mat?
- 23. 如何通过WiFi网络传递NSArray?
- 24. 快速的方法在网络上传输Java对象
- 25. Restful webservice - 如何通过网络发送自引用的对象?
- 26. 通过网络发送对象向量
- 27. 通过网络发送对象
- 28. 通过网络推送JAX-B对象
- 29. 通过网络使用python流式传输连续数据
- 30. 使用arecord和aplay通过网络传输音频
我正在通过线路寻找串流字节流的帮助。你能提供一些参考吗? – Jus12 2011-03-07 21:18:37
RMI是旧的,无法处理与系统中的NAT回调 – user3224416 2015-07-08 15:32:28