java中的ShortBuffer

一、概述

java.lang.Object
  java.nio.Buffer
      java.nio.ShortBuffer
public abstract class ShortBuffer extends Buffer implements Comparable<ShortBuffer>

short 缓冲区。

此类定义了 short 缓冲区上的四类操作:

  • 读写单个 short 的绝对和相对 get
    put 方法。
  • 将此缓冲区的连续 short 序列传输到数组中的相对批量 get 方法;
  • 将 short 数组或其他 short 缓冲区中的连续 short 序列传输到此缓冲区的相对批量 put 方法;以及
  • short 缓冲区的 compactingduplicating
    slicing 方法。

    short 缓冲区可以通过 allocation 创建,此方法通过
    wrapping 将一个现有 short 数组包装到缓冲区中来为缓冲区内容分配空间,或者通过创建现有字节缓冲区的视图来创建。

    像字节缓冲区一样,short 缓冲区要么是直接的,要么是非直接的。通过此类的
    wrap 方法创建的 short 缓冲区将是非直接的。当且仅当字节缓冲区本身为直接时,作为字节缓冲区的视图创建的 short 缓冲区才是直接的。通过调用
    isDirect 方法可以确定 short 缓冲区是否为直接的。

    指定此类中的方法(它们不返回其他值),以返回这些方法被调用时所在的缓冲区。这允许对方法调用进行链接。

    二、概述

    1、public static ShortBuffer
    allocate(int capacity)

    分配新的 short 缓冲区。

    新缓冲区的位置将为零,其界限将为其容量,其标记是未定义的。它将具有一个底层实现数组,且其数组偏移量将为零。

    参数:
    capacity - 新缓冲区的容量,以 short 为单位
    返回:
    新的 short 缓冲区
    抛出:
    IllegalArgumentException - 如果
    capacity 为负整数

    2、public static ShortBuffer
    wrap(short[] array,  int offset,int length)

    将 short 数组包装到缓冲区中。

    给定的 short 数组将支持新缓冲区;即缓冲区修改将导致数组修改,反之亦然。新缓冲区的容量将为 array.length,其位置将为
    offset
    ,其界限将为 offset + length,其标记是未定义的。其底层实现数组将为给定数组,并且其数组偏移量将为零。

    参数:
    array - 支持新缓冲区的数组
    offset - 要使用的子数组的偏移量;必须为非负且不大于 array.length。将新缓冲区的位置设置为此值。
    length - 要使用的子数组的长度;必须为非负且不大于 array.length - offset。将新缓冲区的界限设置为
    offset + length
    返回:
    新的 short 缓冲区
    抛出:
    IndexOutOfBoundsException - 如果关于
    offsetlength 参数的前提不成立

    3、public static ShortBuffer
    wrap(short[] array)

    将 short 数组包装到缓冲区中。

    给定的 short 数组将支持新缓冲区;即缓冲区修改将导致数组修改,反之亦然。新缓冲区的容量和界限将为 array.length,其位置将为零,其标记是未定义的。其底层实现数组将为给定数组,并且其数组偏移量将为零。

    参数:
    array - 实现此缓冲区的数组
    返回:
    新的 short 缓冲区

    4、public abstract ShortBuffer
    slice()

    创建新的 short 缓冲区,其内容是此缓冲区内容的共享子序列。

    新缓冲区的内容将从此缓冲区的当前位置开始。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。

    新缓冲区的位置将为零,其容量和界限将为此缓冲区中所剩余的 short 数量,其标记是未定义的。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。

    返回:
    新的 short 缓冲区

    5、public abstract ShortBuffer
    duplicate()

    创建共享此缓冲区内容的新的 short 缓冲区。

    新缓冲区的内容将为此缓冲区的内容。此缓冲区内容的更改在新缓冲区中是可见的,反之亦然;这两个缓冲区的位置、界限和标记值是相互独立的。

    新缓冲区的容量、界限、位置和标记值将与此缓冲区相同。当且仅当此缓冲区为直接时,新缓冲区才是直接的,当且仅当此缓冲区为只读时,新缓冲区才是只读的。

    返回:
    新的 short 缓冲区

    6、public abstract ShortBuffer
    asReadOnlyBuffer()

    创建共享此缓冲区内容的新的只读 short 缓冲区。

    新缓冲区的内容将为此缓冲区的内容。此缓冲区内容的更改在新缓冲区中是可见的,但新缓冲区将是只读的并且不允许修改共享内容。两个缓冲区的位置、界限和标记值是相互独立的。

    新缓冲区的容量、界限、位置和标记值将与此缓冲区相同。

    如果此缓冲区本身是只读的,则此方法与 duplicate 方法完全相同。

    返回:
    新的只读 short 缓冲区

    7、public abstract short get()

    相对 get 方法。读取此缓冲区当前位置的 short,然后该位置递增。

    返回:
    缓冲区当前位置的 short
    抛出:
    BufferUnderflowException - 如果缓冲区当前位置不小于其界限

    8、public abstract ShortBuffer
    put(short s)

    相对 put 方法(可选操作)

    将给定 short 写入此缓冲区的当前位置,然后该位置递增。

    参数:
    s - 要写入的 short
    返回:
    此缓冲区
    抛出:
    BufferOverflowException - 如果此缓冲区的当前位置不小于界限
    ReadOnlyBufferException - 如果此缓冲区是只读的

    9、public abstract short get(int index)

    绝对 get 方法。读取给定索引处的 short。

    参数:
    index - 将读取 short 的位置的索引
    返回:
    给定索引处的 short
    抛出:
    IndexOutOfBoundsException - 如果
    index 为负或不小于缓冲区界限

    10、public abstract ShortBuffer
    put(int index, short s)

    绝对 put 方法(可选操作)

    将给定 short 写入此缓冲区的给定索引处。

    参数:
    index - 将在该位置写入 short
    s - 要写入的 short 值
    返回:
    此缓冲区
    抛出:
    IndexOutOfBoundsException - 如果
    index 为负或不小于缓冲区界限
    ReadOnlyBufferException - 如果此缓冲区是只读的

    11、public ShortBuffer
    get(short[] dst,int offset,int length)

    相对批量 get 方法。

    此方法将此缓冲区的 short 传输到给定的目标数组中。如果缓冲区中剩余的 short 少于满足请求所需的 short,即如果 length > remaining(),则不传输 short 且抛出
    BufferUnderflowException

    否则,此方法将此缓冲区中的 length 个 short 复制到给定数组中,从此缓冲区的当前位置和数组中的给定偏移量位置开始复制。然后此缓冲区的位置递增
    length

    换句话说,调用此方法的形式为 src.get(dst, off, len),效果与以下循环语句完全相同:

         for (int i = off; i < off + len; i++)
             dst[i] = src.get(); 

    区别在于它首先检查此缓冲区中是否具有足够的 short,这样可能效率更高。

    参数:
    dst - 要写入 short 的数组
    offset - 要写入的第一个 short 在数组中的偏移量;必须为非负且不大于 dst.length
    length - 要写入给定数组中的 short 的最大数量;必须为非负且不大于 dst.length - offset
    返回:
    此缓冲区
    抛出:
    BufferUnderflowException - 如果此缓冲区中的剩余 short 少于
    length
    IndexOutOfBoundsException - 如果关于
    offsetlength 参数的前提不成立

    12、public ShortBuffer
    get(short[] dst)

    相对批量 get 方法。

    此方法将此缓冲区的 short 传输到给定的目标数组中。调用此方法的形式为 src.get(a),该调用与以下调用完全相同:

         src.get(a, 0, a.length) 
    返回:
    此缓冲区
    抛出:
    BufferUnderflowException - 如果此缓冲区中的剩余 short 少于
    length

    13、public ShortBuffer
    put(ShortBuffer src)

    相对批量 put 方法(可选操作)

    此方法将给定源缓冲区中的剩余 short 传输到此缓冲区中。如果源缓冲区中的剩余 short 多于此缓冲区中的剩余 short 空间,即 src.remaining() > remaining(),则不传输 short 且抛出
    BufferOverflowException

    否则,此方法将给定缓冲区中的 n = src.remaining() 个 short 复制到此缓冲区中,从每个缓冲区的当前位置开始复制。然后这两个缓冲区的位置均递增
    n

    换句话说,调用此方法的形式为 dst.put(src),效果与以下循环语句完全相同:

         while (src.hasRemaining())
             dst.put(src.get()); 

    区别在于它首先检查此缓冲区中是否有足够空间,这样可能效率更高。

    参数:
    src - 要从中读取 short 的源缓冲区;不能为此缓冲区
    返回:
    此缓冲区
    抛出:
    BufferOverflowException - 如果对于源缓冲区中剩余的 short,此缓冲区没有足够空间
    IllegalArgumentException - 如果源缓冲区是此缓冲区
    ReadOnlyBufferException - 如果此缓冲区是只读的

    14、public ShortBuffer
    put(short[] src, int offset,int length)

    相对批量 put 方法(可选操作)

    此方法将给定源数组中的 short 传输到此缓冲区中。如果要从数组复制的 short 多于此缓冲区中的剩余 short 空间,即如果 length > remaining(),则不传输 short 且抛出
    BufferOverflowException

    否则,此方法将给定数组中的 length 个 short 复制到此缓冲区中,从数组中给定偏移量位置和此缓冲区的当前位置开始复制。然后此缓冲区的位置递增
    length

    换句话说,调用此方法的形式为 dst.put(src, off, len),效果与以下循环语句完全相同:

         for (int i = off; i < off + len; i++)
             dst.put(a[i]); 

    区别在于它首先检查此缓冲区中是否有足够空间,这样可能效率更高。

    参数:
    src - 要从中读取 short 的数组
    offset - 要读取的第一个 short 在数组中的偏移量;必须为非负且不大于 array.length
    length - 要从给定数组读取的 short 数量;必须为非负且不大于 array.length - offset
    返回:
    此缓冲区
    抛出:
    BufferOverflowException - 如果此缓冲区没有足够空间
    IndexOutOfBoundsException - 如果关于
    offsetlength 参数的前提不成立
    ReadOnlyBufferException - 如果此缓冲区是只读的

    15、public final ShortBuffer
    put(short[] src)

    相对批量 put 方法(可选操作)

    此方法将给定源 short 数组中的所有内容传输到此缓冲区中。调用此方法的形式为 dst.put(a),该调用与以下调用完全相同:

         dst.put(a, 0, a.length) 
    返回:
    此缓冲区
    抛出:
    BufferOverflowException - 如果此缓冲区没有足够空间
    ReadOnlyBufferException - 如果此缓冲区是只读的

    16、public final boolean hasArray()

    判断是否可通过一个可访问的 short 数组实现此缓冲区。

    如果此方法返回 true,则可以安全地调用 array
    arrayOffset 方法。

    指定者:
    Buffer 中的
    hasArray
    返回:
    当且仅当存在实现此缓冲区的数组,并且此缓冲区不是只读缓冲区时,返回 true

    17、public final short[] array()

    返回实现此缓冲区的 short 数组(可选操作)

    此缓冲区的内容修改将导致返回的数组内容修改,反之亦然。

    调用此方法之前要调用 hasArray 方法,以确保此缓冲区具有可访问的底层实现数组。

    指定者:
    Buffer 中的
    array
    返回:
    实现此缓冲区的数组
    抛出:
    ReadOnlyBufferException - 如果存在实现此缓冲区的数组,但缓冲区是只读的
    UnsupportedOperationException - 如果不存在某个可访问的数组实现此缓冲区

    18、public final int arrayOffset()

    返回此缓冲区的第一个元素在缓冲区的底层实现数组中的偏移量(可选操作)

    如果存在实现此缓冲区的数组,则缓冲区位置 p 对应于数组索引 p + arrayOffset()

    调用此方法之前要调用 hasArray 方法,以确保此缓冲区具有可访问的底层实现数组。

    指定者:
    Buffer 中的
    arrayOffset
    返回:
    此缓冲区的第一个元素在缓冲区数组中的偏移量
    抛出:
    ReadOnlyBufferException - 如果存在实现此缓冲区的数组,但缓冲区是只读的
    UnsupportedOperationException - 如果不存在某个可访问的数组实现此缓冲区

    19、public abstract ShortBuffer
    compact()

    压缩此缓冲区(可选操作)

    将缓冲区当前位置和界限之间的 short(如果有)复制到缓冲区的开始处。即将索引 p = position() 处的 short 复制到索引 0 处,将索引
    p + 1 处的 short 复制到索引 1 处,依此类推,直到将索引 limit() - 1 处的 short 复制到索引
    n
     = limit() - 1 - p 处。然后将缓冲区的位置设置为 n+1,并将其界限设置为其容量。如果已定义了标记,则丢弃它。

    将缓冲区的位置设置为复制的 short 的数量,而不是零,以便调用此方法后可以紧接着调用另一个相对 put 方法。

    返回:
    此缓冲区
    抛出:
    ReadOnlyBufferException - 如果此缓冲区是只读的

    20、public abstract boolean
    isDirect()

    判断此 short 缓冲区是否为直接的。

    指定者:
    Buffer 中的
    isDirect
    返回:
    当且仅当此缓冲区为直接时,返回 true

    21、public String
    toString()  返回总结了此缓冲区状态的字符串。

    返回:一个总结字符串

    22、public int hashCode()

    返回此缓冲区的当前哈希码。

    short 缓冲区的哈希码只取决于其剩余元素;即取决于从 position() 开始一直到(包括) limit() - 1 处的元素。

    因为缓冲区哈希码与内容有关,因此建议不要在哈希映射或类似数据结构中将缓冲区用作键,除非知道它们的内容不会发生更改。

    覆盖:
    Object 中的
    hashCode
    返回:
    此缓冲区的当前哈希码

    23、public boolean equals(Object ob)

    判断此缓冲区是否与另一个对象相同。

    两个 short 缓冲区是相同的,当且仅当:

    1. 它们具有相同的元素类型,
    2. 它们具有相同数量的剩余元素,并且
    3. 两个剩余元素序列(与它们的起始位置无关)逐点相同。

    short 缓冲区与任何其他类型的对象都不同。

    覆盖:
    Object 中的
    equals
    参数:
    ob - 此缓冲区要比较的对象
    返回:
    当且仅当此缓冲区与给定对象相同时,返回 true

    24、public int compareTo(ShortBuffer that)

    将此缓冲区与另一个缓冲区进行比较。

    比较两个 short 缓冲区的方法是按字典顺序比较它们的剩余元素序列,而不考虑每个序列在其对应缓冲区中的起始位置。

    short 缓冲区不能与任何其他类型的对象进行比较。

    指定者:
    接口 Comparable<ShortBuffer> 中的
    compareTo
    参数:
    that - 要比较的对象。
    返回:
    如果此缓冲区小于、等于或大于给定缓冲区,则相应返回负整数、零或正整数

    25、public abstract ByteOrder
    order()

    获取此缓冲区的字节顺序。

    通过分配或通过包装现有 short 数组而创建的 short 缓冲区的字节顺序是底层硬件的本机顺序。作为字节缓冲区的视图而创建的 short 缓冲区的字节顺序是创建视图时字节缓冲区的字节顺序。

    返回:
    此缓冲区的字节顺序
  • 时间: 2024-10-12 20:36:57

    java中的ShortBuffer的相关文章

    Java 中阻塞Io 以及非阻塞IO

    在开始之前 关于本教程 新的输入/输出 (NIO) 库是在 JDK 1.4 中引入的.NIO 弥补了原来的 I/O 的不足,它在标准 Java 代码中提供了高速的.面向块的 I/O.通过定义包含数据的类,以及通过以块的形式处理这些数据,NIO 不用使用本机代码就可以利用低级优化,这是原来的 I/O 包所无法做到的. 在本教程中,我们将讨论 NIO 库的几乎所有方面,从高级的概念性内容到底层的编程细节.除了学习诸如缓冲区和通道这样的关键 I/O 元素外,您还有机会看到在更新后的库中标准 I/O 是

    Java中的BIO、NIO、AIO-3

    Java中的BIO.NIO.AIO-3 java 这一篇是代码篇,敲代码有助于理解记忆这些抽象的东西: 参考资料: http://www.blogjava.net/killme2008/archive/2012/09/17/295743.html Java AIO初探(异步网络IO) https://www.ibm.com/developerworks/cn/java/j-lo-nio2/index.html 在 Java 7 中体会 NIO.2 异步执行的快乐 https://blog.csd

    Java NIO之Java中的IO分类

    前言 前面两篇文章(Java NIO之理解I/O模型(一).Java NIO之理解I/O模型(二))介绍了,IO的机制,以及几种IO模型的内容,还有涉及到的设计模式.这次要写一些更贴近实际一些的内容了,终于要说到了Java中的各种IO了.我也是边学边理解,有写的不对的地方,欢迎小伙伴们指出和补充. Java中的IO分类 BIO BIO是指 Blocking IO 在JDK1.0的时候就引入了,直到JDK1.4一直都是Java中唯一的IO方式.它的主要实现方式就是,一个线程执行一个请求,如果请求数

    java中的三元运算符详解

    最近在带领实习生中遇到很多新手问与三元运算符有关的java题目,多数为代码结果题,少数为应用题.鉴于很多资料上对于java三元运算的讲解过于简单,网上的资料与题目也不是很完善,对于结果答案分析不一,故在此总结,当然仅为个人观点,水平有限,不足之处,还请大家多多指出,互相交流学习. 什么是java三元运算符呢?无疑其操作元有三个,第一个是条件表达式,剩余两个为值,条件表达式为真时运算取第一个值,为假时取第二个值. 其示例代码如下:boolean a = 20 < 45 ? true : false

    java中BigDecimal的学习

    干着java的活,但是看的都是一些偏底层的东西(或者我根本就没有看),有点荒废了java的学习. 最近一直在用到一个类是BigDecimal,但都是模棱两可地在那儿用,并没有深入研究这个类的细节,感觉不能再拖了. BigDecimal,从名字来看就是进行大数运算的,不光这样,还广泛用于小数的精确运算. 当你接触到和钱有关的计算的时候,这个类还是很有用滴. 先来看一个例子 1 package com.tuhooo.bigdecimal; 2 3 /** 4 * Created by tuhooo

    Java 中几个重要的关键字

    Java中的关键字特别多,大致如下: 访问控制 private protected public 类,方法和变量修饰符 abstract class extends final implements interface native new static strictfp synchronized transient volatile 程序控制 break continue return do while if else for instanceof switch case default 异常

    深入剖析Java中的装箱和拆箱

    阅读目录 一.什么是装箱?什么是拆箱?二.装箱和拆箱是如何实现的三.面试中相关的问题 自动装箱和拆箱问题是Java中一个老生常谈的问题了,今天我们就来一些看一下装箱和拆箱中的若干问题.本文先讲述装箱和拆箱最基本的东西,再来看一下面试笔试中经常遇到的与装箱.拆箱相关的问题. 回到顶部 一.什么是装箱?什么是拆箱? 我们知道 Java为每种基本数据类型都提供了对应的包装器类型,至于为什么会为每种基本数据类型提供包装器类型在此不进行阐述,有兴趣的朋友可以查阅相关资料.在Java SE5之前,如果要生成

    JAVA中只有值传递

    今天,我在一本面试书上看到了关于java的一个参数传递的问题: 写道 java中对象作为参数传递给一个方法,到底是值传递,还是引用传递? 我毫无疑问的回答:"引用传递!",并且还觉得自己对java的这一特性很是熟悉! 结果发现,我错了! 答案是: 值传递!Java中只有按值传递,没有按引用传递! 回家后我就迫不及待地查询了这个问题,觉得自己对java这么基础的问题都搞错实在太丢人! 综合网上的描述,我大概了解了是怎么回事,现在整理如下,如有不对之处望大神提出! 先来看一个作为程序员都熟

    Java中如何优雅正确的终止线程

    Java中终止线程的方式主要有三种: 1.使用stop()方法,已被弃用.原因是:stop()是立即终止,会导致一些数据被到处理一部分就会被终止,而用户并不知道哪些数据被处理,哪些没有被处理,产生了不完整的"残疾"数据,不符合完整性,所以被废弃.So, forget it! 2.使用volatile标志位 看一个简单的例子: 首先,实现一个Runnable接口,在其中定义volatile标志位,在run()方法中使用标志位控制程序运行 public class MyRunnable i