寻找一个;“一切都在缓冲吗?”;在java-决定与Netty合作 一些背景:

寻找一个;“一切都在缓冲吗?”;在java-决定与Netty合作 一些背景:,java,buffer,nio,Java,Buffer,Nio,我正在开发一些java软件包,这些软件包需要获取数据,对数据进行分割并在线分发到许多服务器。根据用户代码(使用我的包的人),我将知道使用哪种缓冲区。我已经看到了Netty项目,它有一些有趣的概念和网站上建议的其他解决方案,但这并不完全是我想要的。我想我可以实现我的需求,但我更喜欢重用 实际问题:字节缓冲区要求 将实现与接口分开。 在两个实现之间进行更改 固定尺寸: 直接内存使用 分发上的零拷贝IO 成长型 可以长到一定的尺寸 在重新分配和内存使用量之间保持平衡 更新1:由于许多其他好处,决定使用

我正在开发一些java软件包,这些软件包需要获取数据,对数据进行分割并在线分发到许多服务器。根据用户代码(使用我的包的人),我将知道使用哪种缓冲区。我已经看到了Netty项目,它有一些有趣的概念和网站上建议的其他解决方案,但这并不完全是我想要的。我想我可以实现我的需求,但我更喜欢重用

实际问题:字节缓冲区要求 将实现与接口分开。 在两个实现之间进行更改

固定尺寸:

  • 直接内存使用
  • 分发上的零拷贝IO 成长型

  • 可以长到一定的尺寸
  • 在重新分配和内存使用量之间保持平衡
  • 更新1:由于许多其他好处,决定使用Netty项目库

    我想提供一些关于我的系统的细节。我需要通过服务器网络分发大量数据。我对缓冲区大小的了解很少。有时是固定大小,有时是未知大小模式。我希望能够发展一种机制,让这两个世界都受益。当我收到用于检查的最终缓冲区时,我确实有一个已定义的事件

    我知道,当缓冲区直接映射到内存时,它们的性能会更好。内蒂为我提供了这个,但我不能让这个缓冲区增长。我有动态缓冲区,它可以增长-Netty也提供了这一点

    两个问题:

  • 我是否应该将缓冲区从动态复制到直接,以防发生更改?有办法切换模式吗

  • 您如何看待实现一个类,该类包含一个ChannleBuffer数组,并公开与ChannleBuffer相同的接口,同时包含一个缓冲区数组,根据需要分配新的直接内存

  • 你有其他的解决方案吗


  • 我将很好地了解直接字节缓冲区阵列上的分散/聚集NIO。direct ness不提供拷贝I/O,而阵列提供了增长机制。

    我发现它为我提供了所有需要的东西,还有更多

    直接分配的字节缓冲区池(即传递/使用列表)。尽管如此,我不确定“发行版上的零拷贝IO”是什么意思:(不幸的是ByteBuffer本身是一个密封类,不符合公共接口…所以为什么不只是Netty拥有的任何东西呢?据我所知,Netty支持“无止境的”缓冲区。我想限制我的用户。零拷贝意味着避免为了发送缓冲区而复制太多缓冲区,Netty很适合这样做。