JAVA NIO BUFFER (八)byte Buffer

除了布尔类型,其他基本类型都有自身的Buffer类,但是byteBuffer还有不少其他特性。操作系统和他的IO设备来看,byte是最基本的数据单元。需要把其他类型的数据转化为bytes来操作。为了方便参阅,这里列出来了ByteBuffer的完整API。

public abstract class ByteBuffer extends Buffer implements Comparable {
  public static ByteBuffer allocate (int capacity)
  public static ByteBuffer allocateDirect (int capacity)
  public abstract boolean isDirect(  );
  public static ByteBuffer wrap (byte[] array, int offset,int length)
  public static ByteBuffer wrap (byte[] array)
  public abstract ByteBuffer duplicate(  );
  public abstract ByteBuffer asReadOnlyBuffer(  );
  public abstract ByteBuffer slice(  );
  public final boolean hasArray(  )
  public final byte [] array(  )
  public final int arrayOffset(  )
  public abstract byte get(  );
  public abstract byte get (int index);
  public ByteBuffer get (byte[] dst, int offset, int length)
  public ByteBuffer get (byte[] dst, int offset, int length)
  public abstract ByteBuffer put (byte b);
  public abstract ByteBuffer put (int index, byte b);
  public ByteBuffer put (ByteBuffer src)
  public ByteBuffer put (byte[] src, int offset, int length)
  public final ByteBuffer put (byte[] src)
  public final ByteOrder order(  )
  public final ByteBuffer order (ByteOrder bo)
  public abstract CharBuffer asCharBuffer(  );
  public abstract ShortBuffer asShortBuffer(  );
  public abstract IntBuffer asIntBuffer(  );
  public abstract LongBuffer asLongBuffer(  );
  public abstract FloatBuffer asFloatBuffer(  );
  public abstract DoubleBuffer asDoubleBuffer(  );
  public abstract char getChar(  );
  public abstract char getChar (int index);
  public abstract ByteBuffer putChar (char value);
  public abstract ByteBuffer putChar (int index, char value);
  public abstract short getShort(  );
  public abstract short getShort (int index);
  public abstract ByteBuffer putShort (short value);
  public abstract ByteBuffer putShort (int index, short value);
  public abstract int getInt(  );
  public abstract int getInt (int index);
  public abstract ByteBuffer putInt (int value);
  public abstract ByteBuffer putInt (int index, int value);
  public abstract long getLong(  );
  public abstract long getLong (int index);
  public abstract ByteBuffer putLong (long value);
  public abstract ByteBuffer putLong (int index, long value);
  public abstract float getFloat(  );
  public abstract float getFloat (int index);
  public abstract ByteBuffer putFloat (float value);
  public abstract ByteBuffer putFloat (int index, float value);
  public abstract double getDouble(  );
  public abstract double getDouble (int index);
  public abstract ByteBuffer putDouble (double value);
  public abstract ByteBuffer putDouble (int index, double value);
  public abstract ByteBuffer compact(  );
  public boolean equals (Object ob) {
  public int compareTo (Object ob) {
  public String toString(  )
  public int hashCode(  )
}

除了boolean类型之外,byte占1个byte,char两个,short两个,int四个,long八个,float四个,double八个。虽然这些字节一定是按照顺序的,但是也有大端和小端之分。(指的是连续的内存单元,先放高字节,还是先存放低字节)在java.nio中,字节顺序由ByteOrder这个类来封装

public final class ByteOrder {
  public static final ByteOrder BIG_ENDIAN
  public static final ByteOrder LITTLE_ENDIAN

  public static ByteOrder nativeOrder()
  public String toString()
}

这个类定义了两个自己实例的公共域,在JVM中,只有这两个实例,所以要比较的话,可以使用==。如果你需要知道JVM上的字节顺序,调用nativeOrder方法。

每一个buffer类都可以通过order方法知悉自己现在的字节顺序设置

  public final ByteOrder order()

返回ByteOrder的两个实现之一,但和ByteBuffer不同,这个返回的对象只是可读的。ByteBuffer的默认字节顺序是大根端(无论运行在什么字节顺序的平台上),Java的默认字节顺序也是大根端,允许类文件,序列化的对象运行在任何JVM上。如果本地的硬件设备是小根端的话,这可能会有着性能的影响。把ByteBuffer作为其他数据类型接受的时候,使用本地的字节顺序会更有效。

ByteBuffer的字节顺序可以通过order方法改变

  public final ByteOrder order()
  public final ByteOrder order(ByteOrder bo)

如果buffer被创建为ByteBuffer的一个视图,那么order返回的就是当这个buffer创建时,原来的buffer的字节顺序,即使原来的buffer改变字节顺序,buffer的字节顺序也不会改变。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • java nio Java的IO体系:旧IO新IO:nio,用ByteBuffer和FileChannel读写ni...
    则不达阅读 878评论 0 2
  • 编码问题一直困扰着开发人员,尤其在 Java 中更加明显,因为 Java 是跨平台语言,不同平台之间编码之间的切换...
    x360阅读 2,525评论 1 20
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,839评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,268评论 19 139
  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    JackChen1024阅读 7,647评论 1 143