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