我们有这种情况:
包含这些数据所需的所需数据和客户端组件的服务器。
在服务器上存储了2种类型的数据: - 一些信息 - 基本上只是几个字符串 - 二进制数据
我们在获取二进制数据时遇到问题。双方都是用Java 5编写的,所以我们有两种方式......
由于速度,内存等原因,Web服务不是最佳解决方案......
那么,你更喜欢什么?
如果可能,我想错过低级套接字连接......
提前致谢
维特克
答案 0 :(得分:5)
我认为执行大量数据的唯一方法是使用原始套接字访问。
使用大多数其他方法,您将遇到大文件的内存不足问题。
套接字处理在Java中非常简单,它可以让您流式传输数据而无需将整个文件加载到内存中(这是在没有自己缓冲的情况下在幕后发生的事情)。
使用这种策略,我设法构建了一个系统,允许传输任意大的文件(我使用7+ GB DVD映像来测试系统),而不会遇到内存问题。
答案 1 :(得分:5)
查看W3C标准MTOM,将二进制数据作为SOAP服务的一部分进行传输。它是高效的,因为它作为二进制发送,也可以作为缓冲块发送。它还将与其他客户或提供商互操作:
答案 2 :(得分:2)
您可能需要查看protobuf,这是Google用来交换数据的库。它非常有效和可扩展。在旁注中,永远不要低估装满1TB硬盘的旅行车的带宽!
答案 3 :(得分:1)
我已经尝试将二进制数据转换为Base64,然后通过SOAP调用发送它,这对我有用。我不知道这是否算作一项网络服务,如果确实如此,那么你几乎就是插座了。
答案 4 :(得分:1)
一些选项:
您可以使用RMI来隐藏套接字级别的东西,也许gzip数据......但如果连接失败,它将不会为您恢复。可能也会遇到内存问题。
只使用二进制mime类型HTTP数据(也可能在Web服务器上配置gzip)。简历中的类似问题。
产生类似wget的东西(我想这可以做简历)
如果客户端已有数据(以前的版本),则rsync只会复制更改
答案 5 :(得分:0)
旧的,经济实惠且强大的FTP怎么样?例如,您可以轻松地在服务器端组件中嵌入FTP服务器,然后编写FTP客户端代码。 FTP就是为此而生的(文件传输协议,不是吗?),而带有附件的SOAP并没有考虑到那些东西而设计得非常糟糕。 例如,您可以查看:
http://mina.apache.org/ftpserver/
但是还有其他实现,Apache Mina是我能记得的第一个。
祝你好运&问候答案 6 :(得分:0)
sneakernet可以选择吗? :P
RMI以其易用性和内存泄漏而闻名。被警告。根据我们谈论的数据量,sneakernet和套接字都是不错的选择。
答案 7 :(得分:0)
将GridFTP视为您的传输层。另请参阅this question。