美文网首页
JAVA NIO BUFFER (六)创建Buffer对象

JAVA NIO BUFFER (六)创建Buffer对象

作者: ShootHzj | 来源:发表于2017-08-19 01:33 被阅读89次

    JAVA NIO BUFFER(一)看到了七个基本的buffer类,我们以CharBuffer为例。来看看如何创建一个CharBuffer对象:

    public abstract class CharBuffer extends Buffer implements CharSequence, Comparable {
      public static CharBuffer allocate (int capacity)
      
      public static CharBuffer wrap(char[] array)
      public static CharBuffer wrap(char[] array, int offset, int length)
    
      public final boolean hasArray()
      public final char[] array()
      public final int arrayOffset()
    }
    

    通过包装或者分配都可以构造一个新的Buffer对象,分配方式创建了一个Buffer对象并且给它分配了私人空间。包装方式创建了一个Buffer对象但是没有给它分配私人空间(就使用你传递给它的数组参数)

      //分配一个CharBuffer可以容纳100个字符
      CharBuffer charBuffer = CharBuffer.allocate(100);
      //如果你想要使用你自己的数组
      char[] myArray = new char[100];
      CharBuffer charBuffer = CharBuffer.wrap(myArray);
    

    那么你觉得如下的代码会怎么样呢

      CharBuffer charBuffer = CharBuffer.wrap(myArray,12,42);
    

    会分配一个大小为30的数组给你操作?

    不是,假如myArray的长度是100,CharBuffer还是掌控着长度为100的数组,只是初始的position为12,limit为42.而后面要提到的slice方法可以生成一个只能够操作给定范围的CharBuffer。

    通过allocate或者wrap生成的buffer是不直接的。不直接的buffer包含有着数组。hasArray方法告诉你是否存在数组,如果这个方法返回true,那么array方法就会返回给你这个数组的引用。如果返回false,不要调用array或者arrayOffset方法,否则就会抛出UnsupportedOperationException.

    如果Buffer是只读的,就算它是通过wrap数组方法生成的,调用它的array或者arrayOffset方法也会抛出ReadOnlyBufferException 防止你通过数组修改只读数据。

    相关文章

      网友评论

          本文标题:JAVA NIO BUFFER (六)创建Buffer对象

          本文链接:https://www.haomeiwen.com/subject/ntizrxtx.html