Java中缓冲区的目的是啥?
Posted
技术标签:
【中文标题】Java中缓冲区的目的是啥?【英文标题】:What is the purpose of a Buffer in Java?Java中缓冲区的目的是什么? 【发布时间】:2017-05-04 01:28:47 【问题描述】:Buffer 是一个抽象类,具有具体的子类,例如 ByteBuffer、IntBuffer 等。它似乎是特定原始类型数据的容器。缓冲区有什么好处?为什么我不只使用数组或列表?
【问题讨论】:
阅读文档应该通过突出差异来回答这个问题。例如,请参阅***.com/q/4841340/438992 我看到了这些方法的作用。我想知道缓冲区的用途通常是什么。为了清楚起见,我的问题的另一个版本可能是“'缓冲区'这个名字意味着什么?”。 我猜我认为目的是由它的能力暗示的¯_(ツ)_/¯ 【参考方案1】:可以以最简单的形式将缓冲区定义为某种类型的连续内存块。因此,大小为 4K(4096 字节)的字节缓冲区可能会占用内存位置 0xf000
到 0xffff
(含)。
至于为什么可以使用缓冲区类型而不是数组或列表,这两种选择都没有limit
、position
或mark
的内置功能。
在第一项中,缓冲区将capacity
与limit
分开,因为您可以将capacity
设为1000,而当前limit
设为10。换句话说,它强制具有以下能力可变大小直到并包括capacity
。
对于其他两个功能,当前的position
提供了一种内置方式来读取或写入下一个元素,从而简化了顺序处理,而mark
提供了一种保存当前position
以供以后重置的方式.
如果您需要将它们与数组或列表结合使用,所有这些功能都需要额外的变量。
当然,如果您不需要任何这些功能,那么请务必使用数组。
【讨论】:
buffer这个名字是什么意思? @CowPowPow,缓冲区只是一个连续的内存块。例如,内存位置 17 的 10 字节缓冲区占用从 17 到 26 的字节地址(包括 17 到 26)。我会将其添加到答案中。【参考方案2】:缓冲是一种 I/O 性能增强技术。使用这些的优点是通过在内存中将较小的输出组合在一起来减少 I/O 请求的数量。每个输出操作都指向内存中称为缓冲区的区域,该区域大到足以容纳许多输出操作的数据。使用缓冲可以大大提高应用程序的性能。与访问计算机内存中数据的速度相比,典型的 I/O 操作非常慢。
【讨论】:
以上是关于Java中缓冲区的目的是啥?的主要内容,如果未能解决你的问题,请参考以下文章