1

我目前正在尝试找出通过 RMI 传输相当大的字节数组 (<50MB) 是否是个好主意。

我读到它很慢,数据需要保存在客户端和服务器的内存中。当有多个调用时,这可能会导致问题。

有没有(简单的)替代方案?

4

4 回答 4

3

RMIIO 允许您以分块方式流式传输对象。

编辑:您还可以使用KRYO序列化和压缩对象以通过网络发送。

于 2012-08-20T09:25:00.853 回答
1

考虑支持压缩以发送/接收大量数据的 java 流。

例如GZipOutputStream发送数据和GZipInputStream接收发送的数据块。

于 2012-08-20T09:19:40.640 回答
1

RMI 旨在传输对象。如果您在服务器上有一个字节数组对象并希望它在客户端上,您必须在两个地方都拥有它,直到它成功交付(然后您可以让原始对象消失)。

更合理的方法可能是重复调用填充远程对象,一次只传输一小块。这反过来又需要多次旅行,使其变慢。

您要解决的实际(非技术)问题是什么?

于 2012-08-20T09:25:24.120 回答
1

这是一个非常糟糕的主意。在调用远程方法之前,必须在内存中形成字节数组;然后它必须在呼叫中传输;然后它必须由服务器读取;那么它必须存在于服务器中;然后它可以由服务器处理。您永远不想在一个块中处理这么大的数据项。它既浪费时间又浪费空间。考虑一个流式 API,您可以在两端使用中等大小的缓冲区;以方便发送方的块形式发送数据;并以方便接收者的块接收它。

于 2012-08-20T10:14:39.367 回答