一些背景:
我正在研究一些需要获取数据的 java 包,将其划分并分发到许多在线服务器。根据用户代码(使用我的包的人),我会知道使用哪种缓冲区。我看过 Netty 项目,它考虑了一些有趣的概念以及网站上建议的其他解决方案,但并不是我正在寻找的。我想我可以实现我的要求,但我更喜欢重用。
实际问题:字节缓冲区要求
将实现与接口(interface)分开。 两种实现之间的变化。
固定尺寸:
- 直接内存使用。
- 分发时的零复制 IO。
规模不断扩大
- 可以长到一定大小。
- 在重新分配和使用的内存量之间保持平衡。
更新 1:由于许多其他好处,决定使用 Netty 项目库。
我想提供一些关于我的系统的细节。我需要在整个服务器网络中分发大量数据。我对缓冲区大小的了解非常少。有时它可以是固定尺寸,有时它可以是未知尺寸模式。我希望能够开发一种机制,享受两个世界的好处。当我收到用于检查的最终缓冲区时,我确实有一个定义的事件。
我知道缓冲区在直接映射到内存时性能会更好。 Netty 为我提供了这个,但我无法让这个缓冲区增长。我有可以增长的动态缓冲区 - Netty 也提供了。
几个问题:
我是否应该将缓冲区从动态复制到直接,以防它发生变化?有没有办法切换模式?
您如何看待实现一个类,该类包含 ChannleBuffer 数组并公开与 ChannleBuffer 相同的接口(interface),同时包含“内部”缓冲区数组并根据需要分配新的直接内存。
您还有其他解决方案吗?
最佳答案
我会好好看看直接字节缓冲区的 数组 上的分散/聚集 NIO。直接性为您提供无复制 I/O,数组为您提供增长机制。
关于java - 在 java 中寻找 "does everything buffer"- 决定使用 Netty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780034/