大字节数组传输到客户端

| 让我介绍一下我的情况。 我有很多数据以字节为单位存储在服务器上的文件中。我正在使用JDK7中随附的AIO编写和读取此文件。因此,我正在使用ByteBuffer进行读写操作。 问题是,一旦我在AsynchronousFileChannel上执行了读取,就想将读取操作中使用的ByteByffer的内容传输到客户端。因此,我实际上想发送字节。 从这里出发最好的方法是什么。我不想发送ByteBuffer,因为我有一个池可以重用,因此这不是一个选择。我还希望甚至可以合并多个读取并发送一次组合的多个ByteBuffer的内容。 所以我该寄什么。只是一个byte []数组?还是我需要一些流?什么是关于性能的最佳解决方案。 我正在使用RMI进行通信。 提前感谢。     
已邀请:
您可以使用RMIIO库在rmi上模拟流,这将允许您通过RMI流式传输任意数量的字节,而不会引起两端的内存问题。 (免责声明,我写了图书馆)     
除非有很好的理由,否则只需将字节数组与足够的元数据一起发送即可提供可靠的服务。 通过RMI来回传输的基础实现越少越好。特别是当您使用尚未普遍可用的Java 7时。     
要使用RMI,您必须以retrieve0ѭ检索缓冲区的内容,然后将其写入
ObjectOutputStream
(写操作在幕后进行)。假设您当前正在使用直接缓冲区,这意味着在Java堆中创建阵列的CPU时间,以及在写入该阵列后对该阵列进行垃圾收集的CPU时间,以及流将保留在其上的可能性。引用过长,导致内存不足错误。 我认为,一种更好的方法是向目标位置打开一个“ 2”,然后使用它来写入缓冲区的内容。当然,要完成这项工作,您将需要编写描述缓冲区大小的其他数据,并且这很可能会演变成一种通信协议。     

要回复问题请先登录注册