【问题标题】:What is the main usage of Java NIO Buffer classes?Java NIO Buffer 类的主要用途是什么?
【发布时间】:2012-03-28 16:37:32
【问题描述】:

我不明白 Buffer 类是干什么用的。不是用来缓冲的吗?我认为这应该意味着一个缓冲区对象应该允许同时独立地读取和写入它。然而事实并非如此:缓冲区只允许一个position,一个用于读写。这意味着如果我用相对put() 向缓冲区写入了一些东西,那么我就不能用相对get() 读取任何敏感的东西。另外,如果我交替调用put()get(),我会精神错乱。

那么缓冲区有什么使用模式(示例)吗?所以很明显这些缓冲区比传统数组更好?

【问题讨论】:

  • 我同意。在我看来,该设计在没有单独的读写指针方面存在严重缺陷。他们提供的“翻转()”操作的丑陋名称也让游戏失去了意义。如果它对应于现实世界中的某些东西,它会有一个更好的名字。相反,它完全是一个 API 工件,具有同样人为的名称。

标签: java design-patterns buffer nio


【解决方案1】:

ByteBuffer 用于读取和写入数据,您可以获取/放入许多原始类型并控制字节顺序。它们可以是直接内存(堆外)和内存映射文件(也是堆外)的包装器

它们可用于提高性能(因为它们无需将字节组合在一起即可本机访问 long 或 double),直接字节缓冲区无需额外复制到“Java”内存即可读取/写入数据。内存映射文件可以扩展到您的磁盘空间大小,允许您使用大量内存而不会影响您的 GC 时间。

【讨论】:

  • 两个ByteBuffers可以共享同一个数组或者内存区域吗?这将允许使用一个用于读取和另一个用于写入?
  • 我在线程和进程之间传递数据的具体做法是什么。即共享内存。
  • 最简单的方法是创建一个 ByteBuffer 和 splice(0 it。然后你有两个 ByteBuffers 使用相同的底层缓冲区。
  • 但是为什么数组不足以作为缓冲区(除了直接字节缓冲区),为什么要设计一个新类来包装数据。我在这里问一个问题:stackoverflow.com/questions/27729953/…
猜你喜欢
  • 2010-10-17
  • 2023-03-31
  • 2020-06-25
  • 1970-01-01
  • 2011-11-09
  • 2016-07-13
  • 1970-01-01
  • 2015-02-13
  • 1970-01-01
相关资源
最近更新 更多