2011-04-19 32 views
0

让我来介绍一下我的情况。大字节数组传输到客户端

我有很多数据存储在服务器上的文件中。我正在使用JDK7中的AIO来编写和阅读这些文件。因此,我正在使用ByteBuffer进行读取和写入操作。

问题是我已经对AsynchronousFileChannel执行读操作了,我想将读操作中使用的ByteByffer的内容传送给客户端。因此,我真的想发送字节。

什么是最好的方式从这里走。我不想发送ByteBuffer,因为我有一个重用的池,因此这不是一个选项。我希望能够甚至可以组合多个读取并且一次发送几个ByteBuffer(s)的内容。

那我要发什么。只是一个字节[]数组?或者我需要一些流?这里最好的解决方案是什么?

我正在使用RMI进行通信。

Thanx提前。

+0

用java重新命名了你的问题。更有可能以这种方式得到回应。 – 2011-04-19 15:44:41

+0

如果性能很关键,我不会使用标准的Java RMI。你做的任何事情都不会有所作为。如果你不得不使用Java RMI,我不会担心性能太多。 ;) – 2011-04-19 15:56:52

回答

0

除非有一个非常好的理由,否则只需发送字节数组以及足够的元数据以便提供可靠的服务。

您需要通过RMI来回传输的底层实现越少越好。特别是当您使用尚未普遍使用的Java 7时。

+0

其实没有一个好的理由不这样做。我想我会这样做,因为它接缝最简单,并不需要涉及其他组件/库/以往任何时候。 – 2011-04-20 08:54:10

0

要使用RMI,您必须检索缓冲区的内容作为byte[],然后将其写入ObjectOutputStream(写入发生在封面)。假设您当前正在使用直接缓冲区,这意味着在Java堆中创建数组的CPU时间以及在写入该数组后垃圾收集该数组的CPU时间,以及该流保留该引用的可能性过长,导致内存不足的错误。

在我看来,更好的方法是打开一个SocketChannel到目的地并用它来写入缓冲区的内容。当然,为了完成这项工作,您需要编写描述缓冲区大小的额外数据,这可能会演变成一种通信协议。

1

您可以使用RMIIO库模拟rmi上的流,这将允许您通过RMI传输任意数量的字节,而不会在任何一端导致内存问题。

(免责声明,我写了图书馆)

+0

很酷,我推荐给别人之前:) – 2011-04-19 17:21:46

相关问题