背景:
我正在开发一些java包,这些包需要获取数据,将其划分并在线分发到许多服务器。根据用户代码(使用我的包的人),我将知道使用哪种缓冲区。我已经看到Netty项目有一些有趣的概念和其他解决方案建议在这里的网站,但不是我所寻找的。我想我可以实现我的要求,但我更喜欢重用。
实际问题:字节缓冲区需求
将实现与接口分开。两个实现之间的更改。
固定大小:- 直接内存使用。
- 分发时零拷贝IO。
生长大小
- 可以长到一定大小。 在重新分配和使用的内存数量之间保持平衡。
更新1:决定使用Netty项目库,因为它有很多其他的好处。
我想给出我的系统的一些细节。我需要在服务器网络中分发大量数据。我对缓冲区大小的了解非常少。有时它可以是固定大小,有时它可以是未知大小模式。我希望能够开发一种机制,享受这两个世界的好处。当我收到要检查的最终缓冲区时,我确实有一个已定义的事件。
我知道当缓冲区直接映射到内存时,它们可以执行得更好。妮蒂为我提供了这个,但我不能让这个缓冲增长。我有一个可以增长的动态缓冲区——netty也提供了。
几个问题:
我应该复制缓冲区从动态到直接,以防它被改变?有办法切换模式吗?
你认为实现一个类保存一个ChannleBuffer数组,并公开与ChannleBuffer相同的接口,同时包含"内部"一个缓冲区数组,根据需要分配新的直接内存。
您有其他的解决方案吗?
我会好好看看直接字节缓冲区的数组上的scatter/gather NIO。直接性为您提供了无复制I/O,数组为您提供了增长机制。
我发现Netty提供了我需要的所有东西,甚至更多。