java - 在 java 中寻找 "does everything buffer"- 决定使用 Netty

标签 java buffer nio

一些背景:

我正在研究一些需要获取数据的 java 包,将其划分并分发到许多在线服务器。根据用户代码(使用我的包的人),我会知道使用哪种缓冲区。我看过 Netty 项目,它考虑了一些有趣的概念以及网站上建议的其他解决方案,但并不是我正在寻找的。我想我可以实现我的要求,但我更喜欢重用。

实际问题:字节缓冲区要求

将实现与接口(interface)分开。 两种实现之间的变化。

固定尺寸​​:

  1. 直接内存使用。
  2. 分发时的零复制 IO。

规模不断扩大

  1. 可以长到一定大小。
  2. 在重新分配和使用的内存量之间保持平衡。

更新 1:由于许多其他好处,决定使用 Netty 项目库。

我想提供一些关于我的系统的细节。我需要在整个服务器网络中分发大量数据。我对缓冲区大小的了解非常少。有时它可以是固定尺寸,有时它可以是未知尺寸模式。我希望能够开发一种机制,享受两个世界的好处。当我收到用于检查的最终缓冲区时,我确实有一个定义的事件。

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

几个问题:

  1. 我是否应该将缓冲区从动态​​复制到直接,以防它发生变化?有没有办法切换模式?

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

  3. 您还有其他解决方案吗?

最佳答案

我会好好看看直接字节缓冲区的 数组 上的分散/聚集 NIO。直接性为您提供无复制 I/O,数组为您提供增长机制。

关于java - 在 java 中寻找 "does everything buffer"- 决定使用 Netty,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7780034/

相关文章:

image - 用minio上传图像缓冲区

C++ 无延迟地写入控制台

java - OpenJDK 11 问题 - 客户端在最后一次 UNWRAP 之前完成握手

java - 运行打包程序时出现UnmappableCharacterException

java - 在Java中创建一个弹出框

Java:通过解析 XML 文件获取对象的属性

java - 如何在 Android 的 TextView 中显示 unicode 字符?

java - 使用 clojure 分析/proc/cpuinfo

c++ - 如何使用 GetProfileSectionA 读取 C++ 中的 INI 部分

java - 读取NIO中的数据