【问题标题】:What is the purpose of a Buffer in Java?Java中缓冲区的目的是什么?
【发布时间】:2017-05-04 01:28:47
【问题描述】:

Buffer 是一个抽象类,具有具体的子类,例如 ByteBuffer、IntBuffer 等。它似乎是特定原始类型数据的容器。缓冲区有什么好处?为什么我不只使用数组或列表?

【问题讨论】:

  • 阅读文档应该通过突出差异来回答这个问题。例如,请参阅stackoverflow.com/q/4841340/438992
  • 我看到了这些方法的作用。我想知道缓冲区的用途通常是什么。为了清楚起见,我的问题的另一个版本可能是“'缓冲区'这个名字意味着什么?”。
  • 我猜我认为目的是由它的能力暗示的¯_(ツ)_/¯

标签: java buffer


【解决方案1】:

可以以最简单的形式将缓冲区定义为某种类型的连续内存块。因此,大小为 4K(4096 字节)的字节缓冲区可能会占用内存位置 0xf0000xffff(含)。

至于为什么可以使用缓冲区类型而不是数组或列表,这两种选择都没有limitpositionmark 的内置功能。

在第一项中,缓冲区将capacitylimit 分开,因为您可以将capacity 设为1000,而当前limit 设为10。换句话说,它强制具有以下能力可变大小直到并包括capacity

对于其他两个功能,当前的position 提供了一种内置方式来读取或写入下一个元素,从而简化了顺序处理,而mark 提供了一种保存当前position 以供以后重置的方式.

如果您需要将它们与数组或列表结合使用,所有这些功能都需要额外的变量。

当然,如果您不需要任何这些功能,那么请务必使用数组。

【讨论】:

  • buffer这个名字是什么意思?
  • @CowPowPow,缓冲区只是一个连续的内存块。例如,内存位置 17 的 10 字节缓冲区占用从 17 到 26 的字节地址(包括 17 到 26)。我会将其添加到答案中。
【解决方案2】:

缓冲是一种 I/O 性能增强技术。使用这些的优点是通过在内存中将较小的输出组合在一起来减少 I/O 请求的数量。每个输出操作都指向内存中称为缓冲区的区域,该区域大到足以容纳许多输出操作的数据。使用缓冲可以大大提高应用程序的性能。与访问计算机内存中数据的速度相比,典型的 I/O 操作非常慢。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多